双方向通信の力を解き放つ: 「yield from」は Python 3.3 に何をもたらしますか?

DDD
リリース: 2024-10-24 04:00:02
オリジナル
633 人が閲覧しました

Unlocking the Power of Bi-Directional Communication: What does

Python 3.3 の "yield from" の威力

Python 3.3 では、"yield from" 構文が導入され、プログラミングに革新的なアプローチがもたらされました。ジェネレーターとコルーチンを使用します。通常のジェネレーターと似ていますが、yield from は呼び出し元とサブジェネレーターの間に直接接続を確立し、シームレスな双方向通信を可能にします。

1.ジェネレーターからのデータの読み取り

最も単純な使用例は、ジェネレーターからのデータの読み取りです。 yield from を使用すると、通常のループと同様に、簡略化された構文でジェネレーターから値を受け取ることができます。

たとえば、データの読み取りをシミュレートするジェネレーターを考えてみましょう。

<code class="python">def reader():
    for i in range(4):
        yield '<< %s' % i
ログイン後にコピー

Usingから得られる場合、次のようにデータを反復処理できます:

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

wrap = reader_wrapper(reader())
for i in wrap:
    print(i)
ログイン後にコピー

2.コルーチンへのデータの送信

は、データをコルーチンに送信するときに輝きます。 yield from を使用すると、ラッパーに送信されたデータは透過的にコルーチンに転送されます。

特定の宛先にデータを書き込むコルーチンを考えてみましょう:

<code class="python">def writer():
    while True:
        w = (yield)
        print('>> ', w)</code>
ログイン後にコピー

yield を使用してこのライターにデータを送信するにはから:

<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.例外処理

は例外をシームレスに処理します。サブジェネレーターで発生した例外は呼び出し元に伝播されます。さらに、ラッパーに送信された例外をサブジェネレーターにスローできます。

たとえば、ライター コルーチンでは:

<code class="python">def writer():
    while True:
        try:
            w = (yield)
        except SpamException:
            print('***')
        else:
            print('>> ', w)</code>
ログイン後にコピー

yield from を使用すると、次のように例外を処理できます。 :

<code class="python">def writer_wrapper(coro):
    yield from coro</code>
ログイン後にコピー

4.双方向通信の力

yield from の重要な側面は、確立される双方向接続です。データをコルーチンに送信するだけでなく、例外を伝播し、サブジェネレーターの最終値を返すこともできます。

結論

yield from は強力なツールですそれは Python のジェネレーターとコルーチンに革命をもたらしました。双方向通信を簡素化し、例外をシームレスに処理し、洗練されたソリューションを可能にします。そのユースケースはここで説明した例をはるかに超えており、Python の多くの高度なプログラミング タスクに不可欠なコンポーネントとなっています。

以上が双方向通信の力を解き放つ: 「yield from」は Python 3.3 に何をもたらしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!