Was macht das Yield-Keyword?

Zuletzt aktualisiert am Sonntag 13. März 2022

Python Yield

yield in Python kann wie die return Anweisung in einer Funktion verwendet werden. Wenn dies der Tat geschieht, gibt die Funktion anstelle der Ausgabe einen Generator zurück, auf den iteriert werden kann.

Sie können dann durch den Generator iterieren, um Elemente zu extrahieren. Die Iterierung erfolgt mit einer forloop oder einfach mit der next() Funktion.

  • Jedes Mal, wenn Sie iterieren, führt Python den Code aus, bis eine yield-Anweisung innerhalb der Funktion gefunden wird.
  • Dann sendet es den angegebenen Wert und hält die Funktion in diesem Zustand an, ohne zu beenden.
  • Wenn die Funktion das nächste Mal aufgerufen wird, wird der Zustand, in dem sie zuletzt angehalten wurde, erinnert und die Ausführung wird von diesem Punkt an fortgesetzt.
  • Dies setzt sich fort, bis der Generator erschöpft ist.

Wie unterscheidet es sich von der Verwendung des return-Schlüsselworts?

Hätten Sie return anstelle von yield verwendet, hätte die Funktion den entsprechenden Wert zurückgegeben, alle lokalen Variablenwerte, die die Funktion zuvor berechnet hatte, würden gelöscht und beim nächsten Aufgerufen der Funktion wird die Funktionsausführung neu gestartet.

Yield Python

	# Die Funktion gibt einen Generator zurück, wenn sie auf "Ertrag" stößt.
def simpleGen():
    x = 2
    yield x
    yield x + 2
    yield x + 4

genObj = simpleGen()
print(genObj)
# <generator object simpleGen at 0x7fc0df9bd580>
	

Jetzt können Sie das Generatorobjekt durchlaufen. Aber es funktioniert nur einmal.

	def simpleGen():
    x = 2
    yield x
    yield x + 2
    yield x + 4

genObj = simpleGen()
for i in genObj:
    print(i)
	
	# 2
# 4
# 6
	

Ein Python-Programm zur Erzeugung von Quadraten von 1 bis 100 mit Ertrag und damit Generator

	def quadrat():
    i = 1

    while True:
        yield i*i               
        i += 1

for zahl in quadrat():
    if zahl > 200:
        break   
    print(zahl)
	
	# 1
# 4
# 9
# 16
# 25
# 36
# 49
# 64
# 81
# 100
# 121
# 144
# 169
# 196