Generator Yield and Return Interplay in Python
Vor Python 3.3 führte die Kombination von Return und Yield innerhalb einer Funktionsdefinition zu einem Fehler. In Python 3.3 und höher wurde dieses Verhalten jedoch aktualisiert.
Python 3.3-Verhalten
In Python 3.3 wird die Return-Anweisung innerhalb einer Generatorfunktion jetzt ähnlich behandelt zu einer raise StopIteration()-Anweisung. Daher entspricht die Verwendung von return und yield in einem Generator nun dem Auslösen einer StopIteration-Ausnahme mit dem angegebenen Wert.
Beispiel:
Bedenken Sie den folgenden Code:
<code class="python">def f(): return 3 yield 2</code>
Wenn die Funktion f() aufgerufen wird, wird kein Laufzeitfehler mehr ausgelöst. Stattdessen löst die Funktion __next__() des Generatorobjekts (x) eine StopIteration-Ausnahme mit dem Wert 3 aus:
<code class="python">x = f() try: print(x.__next__()) except StopIteration as e: print(e.value) # Prints "3"</code>
Yielding the Returned Value
If Eine Generatorfunktion wird mithilfe der Syntax „Yield from“ delegiert. Der zurückgegebene Wert der Return-Anweisung ist das Ergebnis des delegierten Generators.
Beispiel:
<code class="python">def f(): return 1 yield 2 def g(): x = yield from f() print(x) # Iterate through the generator: for _ in g(): pass # Prints "1"</code>
In diesem Beispiel wird der f()-Generator mithilfe von yield from an den g()-Generator delegiert. Dadurch wird der von return 1 im f()-Generator zurückgegebene Wert zum Ergebnis des g()-Generators.
Das obige ist der detaillierte Inhalt vonWie interagieren Generatorertrag und -rendite in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!