Heim  >  Artikel  >  Backend-Entwicklung  >  Wie funktionieren Return und Yield in Python-Generatoren?

Wie funktionieren Return und Yield in Python-Generatoren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 03:16:02410Durchsuche

How Do Return and Yield Work in Python Generators?

Return und Yield in Python-Generatoren

In Python vor Version 3.3 wäre die gleichzeitige Verwendung von Return- und Yield-Anweisungen innerhalb einer Generatorfunktionsdefinition erforderlich zu einem Fehler führen. Dieses Verhalten hat sich jedoch in Python 3.3 geändert.

Bedenken Sie den folgenden Code:

<code class="python">def f():
  return 3
  yield 2</code>

Der Aufruf von x = f() erstellt einen Generator und x.__next__() löst a aus StopIteration-Ausnahme. Dieses Verhalten unterscheidet sich von der einfachen Rückgabe von 3, die den Wert 3 zurückgegeben hätte.

Das liegt daran, dass in Python 3.3 return innerhalb eines Generators entspricht nun dem Auslösen von StopIteration(). Folglich enthält die StopIteration-Ausnahme im obigen Codeausschnitt den Wert 3. Durch Zugriff auf das Wertattribut der Ausnahme wird dieser Wert abgerufen.

Darüber hinaus ermöglicht yield from die Übertragung von Generatoren auf andere Generatoren. Betrachten Sie das folgende Beispiel:

<code class="python">def f():
    return 1
    yield 2

def g():
    x = yield from f()
    print(x)

for _ in g():
    pass</code>

Dieser Code gibt 1 aus. g delegiert die Ausführung an f, und der von f zurückgegebene Wert (d. h. 1) wird x zugewiesen. Allerdings wird die yield 2-Anweisung in f nicht ausgeführt, da die Ausführung an g delegiert wurde.

Das obige ist der detaillierte Inhalt vonWie funktionieren Return und Yield in Python-Generatoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn