Python 3.3 で「yield from」構文を活用するユースケースと利点は何ですか?

Mary-Kate Olsen
リリース: 2024-10-24 03:44:02
オリジナル
416 人が閲覧しました

What are the Use Cases and Benefits of Leveraging

実際、Python 3.3 の "yield from" 構文を利用する

Python 3.3 で導入された "yield from" 構文は、次のことを提供します。ジェネレーターとコルーチンの機能が大幅に強化されました。呼び出し元とサブジェネレーターの間の双方向接続を確立し、双方向でのシームレスな通信を可能にします。

「yield from」の使用例

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

  • この使用例は for ループの機能を模倣していますが、例外を伝播する利便性が追加されています。例:
<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
ログイン後にコピー

コルーチンへのデータの送信:

  • このシナリオには、送信されたデータを受け入れて書き込むコルーチンの作成が含まれます。ファイルやソケットなどの指定された場所にコピーします。例:
<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>
ログイン後にコピー

マイクロスレッドとの比較

構文からの出力は、サスペンドとコルーチンを再開し、従来のスレッドに代わる軽量のスレッドを作成します。ただし、コルーチンはマイクロスレッドに比べて軽量で、メモリのオーバーヘッドが低くなります。また、同じスレッド上で実行されるため、マルチスレッド環境でのコンテキストの切り替えに関連する問題も回避されます。

以上がPython 3.3 で「yield from」構文を活用するユースケースと利点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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