実際、Python 3.3 の "yield from" 構文を利用する
Python 3.3 で導入された "yield from" 構文は、次のことを提供します。ジェネレーターとコルーチンの機能が大幅に強化されました。呼び出し元とサブジェネレーターの間の双方向接続を確立し、双方向でのシームレスな通信を可能にします。
「yield from」の使用例
読み取りジェネレーターからのデータ:
<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 サイトの他の関連記事を参照してください。