Rückkehr innerhalb eines Generators: Eine Python 3.3-Innovation
In früheren Python-Versionen führte die Verwendung von Return und Yield innerhalb derselben Funktionsdefinition dazu in einem Fehler. Mit Python 3.3 wurde jedoch eine wesentliche Änderung eingeführt.
Bedenken Sie den folgenden Code:
<code class="python">def f(): return 3 yield 2</code>
In diesem Code erscheint die Return-Anweisung vor der Yield-Anweisung. Gemäß dem neuen Verhalten entspricht „die Rückgabe von
Wenn die Funktion next für das Generatorobjekt aufgerufen wird, löst sie eine StopIteration-Ausnahme mit dem Wert aus 3, was der Rückgabe von 3 entspricht. Dieser Wert kann jedoch nicht direkt abgerufen werden, da der Generator beendet wurde. Stattdessen kann auf den Wert als Wertattribut des Ausnahmeobjekts zugegriffen werden.
<code class="python">x = f() try: x.__next__() except StopIteration as e: print(e.value) # Outputs 3</code>
Wenn der Generator außerdem mit der Syntax yield from verwendet wird, fungiert er als Rückgabewert.
<code class="python">def g(): x = yield from f() print(x) for _ in g(): pass</code>
In diesem Fall ist die Ausgabe 1 (der Rückgabewert von f), aber 2 wird nicht gedruckt, da der Generator beendet wurde.
Das obige ist der detaillierte Inhalt vonKann die Rückkehr in Generatoren in Python 3.3 StopIteration-Ausnahmen auslösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!