Heim  >  Artikel  >  Backend-Entwicklung  >  Das Potenzial der bidirektionalen Kommunikation freisetzen: Was bringt „yield from' für Python 3.3?

Das Potenzial der bidirektionalen Kommunikation freisetzen: Was bringt „yield from' für Python 3.3?

DDD
DDDOriginal
2024-10-24 04:00:02703Durchsuche

Unlocking the Power of Bi-Directional Communication: What does

Die Macht von „yield from“ in Python 3.3

Python 3.3 führte die „yield from“-Syntax ein und brachte einen revolutionären Ansatz in die Programmierung mit Generatoren und Coroutinen. Obwohl Yield from regulären Generatoren ähnelt, stellt es eine direkte Verbindung zwischen dem Anrufer und dem Subgenerator her und ermöglicht so eine nahtlose bidirektionale Kommunikation.

1. Daten von einem Generator lesen

Der einfachste Anwendungsfall ist das Lesen von Daten von einem Generator. Durch die Verwendung von yield from können wir Werte vom Generator mit einer vereinfachten Syntax erhalten, ähnlich einer regulären Schleife.

Stellen Sie sich zum Beispiel einen Generator vor, der das Lesen von Daten simuliert:

<code class="python">def reader():
    for i in range(4):
        yield '<< %s' % i

Using Ausbeute aus können wir die Daten wie folgt iterieren:

<code class="python">def reader_wrapper(g):
    yield from g

wrap = reader_wrapper(reader())
for i in wrap:
    print(i)

2. Senden von Daten an eine Coroutine

Ausbeute von Shines beim Senden von Daten an eine Coroutine. Mit yield from werden an den Wrapper gesendete Daten transparent an die Coroutine weitergeleitet.

Stellen Sie sich eine Coroutine vor, die Daten an ein bestimmtes Ziel schreibt:

<code class="python">def writer():
    while True:
        w = (yield)
        print('>> ', w)</code>

Um Daten mit yield an diesen Writer zu senden ab:

<code class="python">def writer_wrapper(coro):
    coro.send(None)
    while True:
        try:
            x = (yield)
            coro.send(x)
        except StopIteration:
            pass

w = writer()
wrap = writer_wrapper(w)
wrap.send(None)
for i in range(4):
    wrap.send(i)</code>

3. Ausnahmebehandlung

yield from behandelt Ausnahmen nahtlos. Im Subgenerator ausgelöste Ausnahmen werden an den Aufrufer weitergegeben. Darüber hinaus kann eine an den Wrapper gesendete Ausnahme in den Subgenerator geworfen werden.

Zum Beispiel in unserer Writer-Coroutine:

<code class="python">def writer():
    while True:
        try:
            w = (yield)
        except SpamException:
            print('***')
        else:
            print('>> ', w)</code>

Mit yield from können wir Ausnahmen wie folgt behandeln :

<code class="python">def writer_wrapper(coro):
    yield from coro</code>

4. Die Kraft der bidirektionalen Kommunikation

Der Schlüsselaspekt von yield from ist die bidirektionale Verbindung, die es herstellt. Es ermöglicht nicht nur das Senden von Daten an die Coroutine, sondern auch die Weitergabe von Ausnahmen und die Rückgabe des Endwerts des Subgenerators.

Fazit

yield from ist ein leistungsstarkes Tool das die Generatoren und Coroutinen in Python revolutionierte. Es vereinfacht die bidirektionale Kommunikation, behandelt Ausnahmen nahtlos und ermöglicht elegante Lösungen. Seine Anwendungsfälle gehen weit über die besprochenen Beispiele hinaus und machen es zu einem wesentlichen Bestandteil vieler fortgeschrittener Programmieraufgaben in Python.

Das obige ist der detaillierte Inhalt vonDas Potenzial der bidirektionalen Kommunikation freisetzen: Was bringt „yield from' für Python 3.3?. 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