Wie interagieren Generatorertrag und -rendite in Python?

Barbara Streisand
Freigeben: 2024-10-25 06:05:29
Original
914 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!