In der Praxis die „Ausbeute aus“-Syntax in Python 3.3 nutzen
Die in Python 3.3 eingeführte „Ausbeute aus“-Syntax bietet Folgendes eine erhebliche Verbesserung der Fähigkeiten von Generatoren und Coroutinen. Es stellt eine bidirektionale Verbindung zwischen einem Anrufer und einem Subgenerator her und ermöglicht so eine nahtlose Kommunikation in beide Richtungen.
Anwendungsfälle für „Ertrag aus“
Lesen Daten von Generatoren:
<code class="python">def reader(): for i in range(4): yield '<< %s' % i def reader_wrapper(g): yield from g wrap = reader_wrapper(reader()) for i in wrap: print(i) # Result: # << 0 # << 1 # << 2 # << 3
Daten an Coroutinen senden:
<code class="python">def writer(): while True: w = (yield) print('>> ', w) def writer_wrapper(coro): yield from coro w = writer() wrap = writer_wrapper(w) wrap.send(None) # Prime the coroutine for i in range(4): wrap.send(i) # Expected result: # >> 0 # >> 1 # >> 2 # >> 3</code>
Vergleich mit Micro-Threads
Die Ausbeute aus der Syntax hat einige Ähnlichkeiten mit Micro-Threads, da sie das Anhalten und ermöglicht Wiederaufnahme von Coroutinen und Schaffung einer leichten Alternative zu herkömmlichen Threads. Allerdings sind Coroutinen im Vergleich zu Mikrothreads leichter und haben einen geringeren Speicheraufwand. Sie werden auch im selben Thread ausgeführt, wodurch die Probleme vermieden werden, die mit dem Kontextwechsel in Umgebungen mit mehreren Threads verbunden sind.
Das obige ist der detaillierte Inhalt vonWas sind die Anwendungsfälle und Vorteile der Nutzung der Syntax „yield from' in Python 3.3?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!