Das yield-Schlüsselwort in Python
In diesem Tutorial werden Zweck und Verwendung des Schlüsselworts yield
in Python erläutert. Das Schlüsselwort yield
ist eine Python-Anweisung, mit der die Generatorfunktionen in Python definiert werden. Die Anweisung yield
kann nur innerhalb des Funktionskörpers verwendet werden.
Der Hauptunterschied zwischen einer Generatorfunktion und einer regulären Funktion besteht darin, dass die Generatorfunktion anstelle der Anweisung return
einen Ausdruck yield
enthält. Die Anweisung yield
erzeugt die Werteserie, die als Generatoriterator als Ausgabe bezeichnet wird. Neue Werte aus dem Iterator können mit der Funktion next()
oder der Schleife for
abgerufen werden.
Jedes Mal, wenn die Funktion next()
aufgerufen wird oder bei jeder Iteration der Schleife for
, gibt die Anweisung yield
einen neuen Wert aus oder erzeugt einen neuen Wert und speichert den Standortausführungsstatus der Funktion, dh die Werte der lokalen Variablen. usw. Bei jedem neuen Funktionsaufruf oder jeder neuen Iteration next()
wird die Anweisung yield
im Gegensatz zur Anweisung return
, die bei jedem Aufruf beginnt, aus dem zuletzt gespeicherten Zustand fortgesetzt.
Beispielcodes für das yield
-Schlüsselwort in Python
Da die Funktionsweise der Anweisung yield
klar ist, wollen wir uns nun ihre Verwendungen und Beispielcodes ansehen. Angenommen, wir haben eine große Datenmenge und diese kann nicht sofort in ein iterierbares Objekt geladen werden, oder wir möchten eine speichereffizientere Methode zum Lesen der Daten. Mit der Yield-Anweisung können wir eine Generatorfunktion erstellen. Die Funktion liest und liefert bei jeder Iteration oder jedem Funktionsaufruf next()
den neuen Datenblock.
Der folgende Beispielcode zeigt, wie Sie die Anweisung yield
mit der Schleife for
verwenden, um eine einfache Generatorfunktion in Python zu erstellen. Die Generatorfunktion my_generator()
im folgenden Beispielcode liefert die neue Nummer von 1
bis 100
und arbeitet bis zu 99
-Aufrufen.
def my_generator():
for x in range(1, 100):
print("new value is generated!")
yield x
Wir benötigen zuerst ein Generator-Iterator-Objekt, um Werte entweder mit der Funktion next()
oder durch Iteration zu generieren.
gen_iter = my_generator()
Lassen Sie uns nun die neuen Werte mit der Funktion next()
vom Generatoriterator abrufen. Wir können auch die Funktion next()
als iterator.__next__()
verwenden, wie im folgenden Beispielcode gezeigt.
val = next(gen_iter)
print("Value =", val)
val = gen_iter.__next__()
print("Value =", val)
Ausgabe:
new value is generated!
Value = 1
new value is generated!
Value = 2
Die andere Methode, um neue Werte zu erhalten, besteht darin, das Generator-Iterator-Objekt mit der Schleife for
zu durchlaufen. Der folgende Beispielcode zeigt, wie das Generator-Iterator-Objekt in Python durchlaufen wird.
for val in gen_iter:
print("Value =", val)
Das obige Codebeispiel generiert alle 99
-Werte aus dem angegebenen Bereich in der Generatorfunktion.
Wir können auch eine Generatorfunktion ohne die for
-Schleife erstellen, indem wir die Anweisung yield
mehrmals verwenden, wie im folgenden Beispielcode gezeigt.
def my_generator():
x = 1
print("new value is generated!")
yield x
x = x + 1
print("new value is generated!")
yield x
x = x + 1
print("new value is generated!")
yield x
Verwenden wir nun unsere neue Generatorfunktion, um alle Werte mit der for
-Schleife zu generieren.
gen_iter = my_generator()
for val in gen_iter:
print("Value =", val)
Ausgabe:
new value is generated!
Value = 1
new value is generated!
Value = 2
new value is generated!
Value = 3