「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python 3.3 で「yield from」構文を活用するユースケースと利点は何ですか?

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

2024 年 11 月 6 日に公開
ブラウズ:791

What are the Use Cases and Benefits of Leveraging \

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

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

「yield from」の使用例

読書ジェネレーターからのデータ:

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

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

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

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

構文からの結果は、コルーチンの一時停止と再開を可能にし、軽量の代替手段を作成するという点でマイクロスレッドといくつかの類似点を共有します。伝統的な糸。ただし、コルーチンはマイクロスレッドに比べて軽量で、メモリのオーバーヘッドが低くなります。また、これらは同じスレッド上で実行されるため、マルチスレッド環境でのコンテキスト切り替えに関連する問題が回避されます。

リリースステートメント この記事は次の場所に転載されています: 1729681907 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3