Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Yield in Python Tutorial:Generator &Yield vs. Return Beispiel

Was ist Python Yield?

Das yield-Schlüsselwort in Python funktioniert wie ein Return mit dem only

Der Unterschied besteht darin, dass anstelle eines Werts ein Generatorobjekt an den Aufrufer zurückgegeben wird.

Wenn eine Funktion aufgerufen wird und der Ausführungsthread ein yield-Schlüsselwort in der Funktion findet, stoppt die Funktionsausführung an dieser Zeile selbst und gibt ein Generatorobjekt an den Aufrufer zurück.

In diesem Python-Tutorial lernen Sie:

Syntax

yield expression

Beschreibung

Python yield gibt ein Generatorobjekt zurück. Generatoren sind spezielle Funktionen, die wiederholt werden müssen, um die Werte zu erhalten.

Das yield-Schlüsselwort wandelt den angegebenen Ausdruck in eine Generatorfunktion um, die ein Generatorobjekt zurückgibt. Um die Werte des Objekts zu erhalten, muss es iteriert werden, um die an den Ertrag gegebenen Werte zu lesen.

Beispiel:Ertragsmethode

Hier ist ein einfaches Ertragsbeispiel. Die Funktion testyield() hat ein yield-Schlüsselwort mit der Zeichenkette „Welcome to Guru99 Python Tutorials“. Wenn die Funktion aufgerufen wird, wird die Ausgabe gedruckt und gibt anstelle des tatsächlichen Werts ein Generatorobjekt zurück.

def testyield():
  yield "Welcome to Guru99 Python Tutorials"
output = testyield()
print(output)

Ausgabe:

<generator object testyield at 0x00000028265EB9A8>

Die angegebene Ausgabe ist ein Generatorobjekt, das den von uns angegebenen Wert für yield hat.

Aber wir bekommen nicht die Botschaft, die wir geben müssten, um die Ausgabe nachzugeben!

Um die an yield übergebene Nachricht zu drucken, muss das Generatorobjekt wie im folgenden Beispiel gezeigt iteriert werden:

def testyield():
  yield "Welcome to Guru99 Python Tutorials"

output = testyield()
for i in output:
    print(i)

Ausgabe

Welcome to Guru99 Python Tutorials

Was sind Generatoren in Python?

Generatoren sind Funktionen, die ein iterierbares Generatorobjekt zurückgeben. Die Werte aus dem Generator-Objekt werden einzeln statt der vollständigen Liste zusammen abgerufen. Um die tatsächlichen Werte zu erhalten, können Sie daher eine for-Schleife verwenden, indem Sie die Methode next() oder list() verwenden.

Generatorfunktion verwenden

Sie können Generatoren mit der Generatorfunktion und mit dem Generatorausdruck erstellen.

Eine Generatorfunktion ist wie eine normale Funktion, anstatt einen Rückgabewert zu haben, hat sie ein yield-Schlüsselwort.

Um eine Generatorfunktion zu erstellen, müssen Sie ein yield-Schlüsselwort hinzufügen. Das folgende Beispiel zeigt, wie Sie eine Generatorfunktion erstellen.

def generator():
    yield "H"
    yield "E"
    yield "L"
    yield "L"
    yield "O"

test = generator()
for i in test:
    print(i)

Ausgabe:

H
E
L
L
O

Unterschied zwischen Normalfunktion und Generatorfunktion.

Lassen Sie uns verstehen, wie sich eine Generatorfunktion von einer normalen Funktion unterscheidet.

Es gibt 2 Funktionen normal_test() und generator_test().

Beide Funktionen sollen die Zeichenfolge „Hello World“ zurückgeben. Normal_test() verwendet return und generator_test() verwendet yield.

# Normal function
def normal_test():
    return "Hello World"
	
#Generator function
def generator_test():
	yield "Hello World"
print(normal_test()) #call to normal function
print(generator_test()) # call to generator function

Ausgabe:

Hello World
<generator object generator_test at 0x00000012F2F5BA20>

Die Ausgabe zeigt, dass beim Aufrufen der normalen Funktion normal_test() die Zeichenfolge „Hello World“ zurückgegeben wird. Für eine Generatorfunktion mit dem Schlüsselwort yield wird und nicht die Zeichenfolge zurückgegeben.

Dies ist der Hauptunterschied zwischen einer Generatorfunktion und einer normalen Funktion. Um nun den Wert aus dem Generator-Objekt zu erhalten, müssen wir entweder das Objekt innerhalb der for-Schleife verwenden oder die next()-Methode verwenden oder list() verwenden.

print(next(generator_test()))  # will output Hello World

Ein weiterer Unterschied, der zur normalen Funktion vs. Generatorfunktion hinzugefügt werden muss, besteht darin, dass beim Aufruf einer normalen Funktion die Ausführung beginnt und stoppt, wenn sie zurückkehrt und der Wert wird an den Aufrufer zurückgegeben. Wenn die Ausführung also beginnt, können Sie die normale Funktion nicht zwischendurch anhalten, und sie wird nur angehalten, wenn sie auf das Schlüsselwort return stößt.

Aber im Falle der Generatorfunktion, sobald die Ausführung beginnt, wenn sie die erste Ausbeute erhält, stoppt sie die Ausführung und gibt das Generatorobjekt zurück. Sie können das Generator-Objekt verwenden, um die Werte abzurufen und je nach Bedarf anzuhalten und fortzusetzen.

Wie lese ich die Werte aus dem Generator?

Sie können die Werte aus einem Generatorobjekt mit einer list()-, for-Schleife und mit der next()-Methode lesen.

Mit :list()

Eine Liste ist ein iterierbares Objekt, dessen Elemente in Klammern stehen. Die Verwendung von list() für ein Generatorobjekt gibt alle Werte aus, die der Generator enthält.

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
print(list(num))

Ausgabe:

[0, 2, 4, 6, 8]

Mit :for-in

In dem Beispiel gibt es eine definierte Funktion even_numbers(), die Ihnen alle geraden Zahlen für das definierte n liefert. Der Aufruf der Funktion even_numbers() gibt ein Generatorobjekt zurück, das innerhalb der for-Schleife verwendet wird.

Beispiel:

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

Ausgabe:

0
2
4
6
8

Mit next()

Die Methode next() gibt Ihnen das nächste Element in der Liste, im Array oder im Objekt. Sobald die Liste leer ist und next() aufgerufen wird, wird ein Fehler mit dem Signal stopIteration zurückgegeben. Dieser Fehler von next() zeigt an, dass es keine weiteren Elemente in der Liste gibt.

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))
print(next(num))

Ausgabe:

0
2
4
6
8
Traceback (most recent call last):
  File "main.py", line 11, in <module>
    print(next(num))
StopIteration

Generatoren sind einmalige Nutzung

Bei Generatoren stehen diese nur einmal zur Verfügung. Wenn Sie versuchen, sie erneut zu verwenden, ist sie leer.

Zum Beispiel:

def even_numbers(n):
    for x in range(n):
       if (x%2==0): 
           yield x       
num = even_numbers(10)
for i in num:
    print(i)

print("\n")
print("Calling the generator again: ", list(num))

Ausgabe:

0
2
4
6
8
Calling the generator again:  []

Falls Sie möchten, dass die Ausgabe erneut verwendet wird, müssen Sie die Funktion erneut aufrufen.

Beispiel:Generatoren und Ertrag für Fibonacci-Reihen

Das folgende Beispiel zeigt die Verwendung von Generatoren und yield in Python. Das Beispiel generiert die Fibonacci-Reihe.

def getFibonnaciSeries(num):
    c1, c2 = 0, 1
    count = 0
    while count < num:
        yield c1
        c3 = c1 + c2
        c1 = c2
        c2 = c3
        count += 1
fin = getFibonnaciSeries(7)
print(fin)
for i in fin:
    print(i)

Ausgabe:

<generator object getFibonnaciSeries at 0x0000007F39C8BA20>
0
1
1
2
3
5
8

Beispiel:Aufruffunktion mit Yield

In diesem Beispiel wird gezeigt, wie man eine Funktion mit yield.

aufruft

Das folgende Beispiel hat eine Funktion namens test(), die das Quadrat der gegebenen Zahl zurückgibt. Es gibt eine weitere Funktion namens getSquare(), die test() mit dem yield-Schlüsselwort verwendet. Die Ausgabe gibt den Quadratwert für den angegebenen Zahlenbereich an.

def test(n):
    return n*n

def getSquare(n):
    for i in range(n):
        yield test(i)

sq = getSquare(10)
for i in sq:
    print(i)

Ausgabe:

0
1
4
9
16
25
36
49
64
81

Wann Yield statt Return in Python verwendet werden sollte

Python3-Ertrag Schlüsselwort gibt einen Generator an den Aufrufer zurück und die Ausführung des Codes beginnt nur, wenn der Generator iteriert wird.

Eine Rückkehr in einer Funktion ist das Ende der Funktionsausführung, und ein einzelner Wert wird an den Aufrufer zurückgegeben.

Hier ist die Situation, in der Sie Yield anstelle von Return verwenden sollten

Rendite vs. Rendite

Hier sind die Unterschiede zwischen Yield und Return

Ertrag Zurück
Yield gibt ein Generatorobjekt an den Aufrufer zurück und die Ausführung des Codes beginnt erst, wenn der Generator iteriert wird. Eine Rückkehr in eine Funktion ist das Ende der Funktionsausführung und ein einzelner Wert wird an den Aufrufer zurückgegeben.
Wenn die Funktion aufgerufen wird und auf das yield-Schlüsselwort trifft, stoppt die Ausführung der Funktion. Es gibt das Generatorobjekt an den Aufrufer zurück. Die Funktionsausführung beginnt erst, wenn das Generatorobjekt ausgeführt wird. Wenn die Funktion aufgerufen wird, beginnt die Ausführung und der Wert wird an den Aufrufer zurückgegeben, wenn das Schlüsselwort return vorhanden ist. Die Rückkehr innerhalb der Funktion markiert das Ende der Funktionsausführung.
Ertragsausdruck Rückgabeausdruck
Bei Verwendung des yield-Schlüsselworts wird kein Speicher verwendet. Der Speicher wird für den zurückgegebenen Wert zugewiesen.
Sehr nützlich, wenn Sie mit großen Datenmengen umgehen müssen, da der Speicher nicht verwendet wird. Praktisch für sehr kleine Datenmengen.
Die Leistung ist besser, wenn das yield-Schlüsselwort für große Datenmengen verwendet wird. Viel Speicher wird verwendet, wenn die Datengröße sehr groß ist, was die Leistung beeinträchtigt.
Die Ausführungszeit ist schneller im Falle einer Ausbeute für große Datenmengen. Die verwendete Ausführungszeit ist länger, da eine zusätzliche Verarbeitung durchgeführt wird, falls Ihre Datengröße sehr groß ist, es für kleine Datengrößen gut funktioniert.

Zusammenfassung:


Python

  1. Anonyme Python/Lambda-Funktion
  2. Python-Generatoren
  3. Python-Schließungen
  4. Python-Dekorateure
  5. Python String strip() Funktion mit BEISPIEL
  6. Länge der Python-Zeichenfolge | len() Methode Beispiel
  7. Python-Lambda-Funktionen mit BEISPIELE
  8. Python-Funktion round() mit BEISPIELE
  9. Python map() Funktion mit BEISPIELE
  10. Python-Zähler in Sammlungen mit Beispiel