Was bewirkt die Funktion „send' von Python in Generatoren?

Linda Hamilton
Freigeben: 2024-11-03 08:50:02
Original
465 Leute haben es durchsucht

What Does Python's

Verstehen des Nutzens von „Senden“ in Python-Generatoren

Während das Konzept von „Ertrag“ in Python-Generatoren weithin verstanden wird, ist der Zweck der Funktion „Senden“ bleibt unklar. Zur Verdeutlichung: Die Funktion „Senden“ ermöglicht die Übertragung von Werten an einen Generator, der kürzlich einen Wert geliefert hat.

Betrachten Sie das folgende vereinfachte Beispiel:

<code class="python">def double_inputs():
    while True:
        x = yield
        yield x * 2</code>
Nach dem Login kopieren

Beim Erstellen einer Generatorinstanz (gen) initialisiert die Ausführung der next(gen)-Anweisung den Generator und unterbricht die Ausführung beim ersten „yield“-Vorkommen. Anschließend fügt der Aufruf von gen.send(10) den Wert 10 in die Variable „yield“ ein. Der Generator gibt dann den Wert 20 zurück, der das Ergebnis der Multiplikationsoperation darstellt.

Diese Fähigkeit, Werte mithilfe von „send“ an Generatoren zu übergeben, unterscheidet ihn von „yield“, das hauptsächlich Werte aus einem Generator liefert.

Eine wichtige Anwendung von „send“ liegt im „@defer.inlineCallbacks“-Dekorator von Twisted. Es ermöglicht die nahtlose Ausführung von Funktionen wie:

<code class="python">@defer.inlineCallbacks
def doStuff():
    result = yield takesTwoSeconds()
    nextResult = yield takesTenSeconds(result * 10)
    defer.returnValue(nextResult / 10)</code>
Nach dem Login kopieren

In diesem Beispiel gibt „takesTwoSeconds“ zunächst ein „Deferred“-Objekt zurück. Twisted weist diese Berechnung einem Hintergrundthread zu und nach Abschluss wird das Ergebnis über „send“ in den wartenden doStuff-Generator eingespeist. Dieser Mechanismus vereinfacht die Codestruktur und ermöglicht einen lineareren und verständlicheren Ablauf beim Umgang mit asynchronen Vorgängen.

Das obige ist der detaillierte Inhalt vonWas bewirkt die Funktion „send' von Python in Generatoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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