Heim  >  Artikel  >  Backend-Entwicklung  >  Wie interagieren Generatorertrag und -rendite in Python?

Wie interagieren Generatorertrag und -rendite in Python?

Barbara Streisand
Barbara StreisandOriginal
2024-10-25 06:05:29904Durchsuche

How Do Generator Yield and Return Interact in Python?

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!

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