1. ホーム
  2. python

[解決済み] Pythonでジェネレータオブジェクトをリセットする

2022-04-15 08:19:52

質問

複数のyieldから返されるジェネレータオブジェクトを持っています。このジェネレータを呼び出す準備には、かなり時間のかかる作業です。そのため、このジェネレータを何度か再利用したい。

y = FunctionWithYield()
for x in y: print(x)
#here must be something to reset 'y'
for x in y: print(x)

もちろん、単純なリストにコンテンツをコピーすることは念頭においています。ジェネレーターをリセットする方法はありますか?

解決方法は?

もう一つの方法は itertools.tee() 関数を使用して、ジェネレータの第2バージョンを作成します。

import itertools
y = FunctionWithYield()
y, y_backup = itertools.tee(y)
for x in y:
    print(x)
for x in y_backup:
    print(x)

これは、元の反復処理がすべての項目を処理しない可能性がある場合、メモリ使用の観点から有益である可能性があります。