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>
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>
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!