複数の値を生成したジェネレーター オブジェクトに遭遇した場合、再利用するためにそれを若返らせることができます。この追求は、ジェネレーターの作成に伴う時間のかかる準備を避けたいという欲求から生じています。
残念ながら、ウロボロスとは異なり、ジェネレーターは自己再生できません。ただし、いくつかの戦略は休息を提供します:
不死鳥のように、親関数を再度呼び出すことでジェネレーターを復活させることができます:
<code class="python">y = FunctionWithYield() for x in y: print(x) y = FunctionWithYield() for x in y: print(x)</code>
このアプローチでは、確実に最新の計算を実行できますが、高価な準備ステップを繰り返すという代償が伴います。
保存を採用すると、ジェネレーターの結果を複数回の反復が可能なデータ構造に保存できます。 :
<code class="python">y = list(FunctionWithYield()) for x in y: print(x) # Can iterate again: for x in y: print(x)</code>
この方法は反復計算を防止しますが、ストレージのオーバーヘッドが発生します。
これらのオプションの選択は、メモリ間の古典的なトレードオフを示します。そして加工。オプション 1 は処理時間を犠牲にし、オプション 2 はメモリに負担をかけます。
他の人が提案しているように、tee はメモリ バッファリングに似た機能を提供しますが、それでも同じストレージ オーバーヘッドとパフォーマンス特性が発生します。オプション 2 として。
以上がPython ジェネレーター オブジェクトを再利用できるように更新できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。