ホームページ  >  記事  >  バックエンド開発  >  Python ジェネレーター オブジェクトを再利用できるように更新できますか?

Python ジェネレーター オブジェクトを再利用できるように更新できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 13:52:02311ブラウズ

Can You Rejuvenate a Python Generator Object for Reuse?

Python でジェネレーター オブジェクトを若返らせる

複数の値を生成したジェネレーター オブジェクトに遭遇した場合、再利用するためにそれを若返らせることができます。この追求は、ジェネレーターの作成に伴う時間のかかる準備を避けたいという欲求から生じています。

残念ながら、ウロボロスとは異なり、ジェネレーターは自己再生できません。ただし、いくつかの戦略は休息を提供します:

オプション 1: ジェネレーターを復活させる

不死鳥のように、親関数を再度呼び出すことでジェネレーターを復活させることができます:

<code class="python">y = FunctionWithYield()
for x in y: print(x)
y = FunctionWithYield()
for x in y: print(x)</code>

このアプローチでは、確実に最新の計算を実行できますが、高価な準備手順を繰り返すという代償が伴います。

オプション 2: 保存を採用する

保存を採用すると、ジェネレーターの結果を複数回の反復が可能なデータ構造に保存できます。 :

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。