Python ジェネレーターの "send" のユーティリティを理解する
Python ジェネレーターの "yield" の概念は広く理解されていますが、その目的は「送信」機能についてはあいまいなままです。明確にするために、「send」関数を使用すると、最近値を生成したジェネレーターに値を送信できます。
次の単純な例を考えてみましょう:
<code class="python">def double_inputs(): while True: x = yield yield x * 2</code>
ジェネレーター インスタンスの作成時(gen)、next(gen) ステートメントを実行すると、ジェネレーターが初期化され、最初の「yield」が発生した時点で実行が一時停止されます。続いて、gen.send(10) を呼び出すと、値 10 が「yield」変数に注入されます。その後、ジェネレーターは、乗算演算の結果を表す値 20 を返します。
「send」を使用してジェネレーターに値を渡すこの機能は、主にジェネレーターから値を渡す「yield」とは区別されます。
「send」の重要なアプリケーションは、Twisted の「@defer.inlineCallbacks」デコレータにあります。これにより、次のような関数のシームレスな実行が可能になります。
<code class="python">@defer.inlineCallbacks def doStuff(): result = yield takesTwoSeconds() nextResult = yield takesTenSeconds(result * 10) defer.returnValue(nextResult / 10)</code>
この例では、「takesTwoSeconds」は最初に「Deferred」オブジェクトを返します。 Twisted はこの計算をバックグラウンド スレッドに割り当て、完了すると、結果が「send」を通じて待機中の doStuff ジェネレーターに注入されます。このメカニズムによりコード構造が簡素化され、非同期操作を処理する際に、より直線的でわかりやすいフローが可能になります。
以上がPython の「send」関数はジェネレーターで何をしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。