私がこのようなクラスを書いた最初の人だとは想像できません:
class RestartableGenerator:
def __init__(self, g):
self.g = g
def __iter__(self):
return self.g().__iter__()
if __name__=='__main__':
def gen():
print 'Generating'
for i in range(5):
yield i
i = RestartableGenerator(gen)
print 'Using'
print list(i)
print list(i)
テストにより、次の出力が生成されます。
Using
Generating
[0, 1, 2, 3, 4]
Generating
[0, 1, 2, 3, 4]
しかし、標準ライブラリには見つかりませんでした。私は itertools と functools を見ました。
本当にないのでしょうか?もしそうなら、どこですか?
シーケンスを複数回評価したい場合は、リストに保存する方がよいため、不要だと考えられましたか?
編集1:私のユースケースは、メモリ消費の理由から、シーケンスがリストではなくジェネレータであることを消費者に透過的にしたいということです。
編集 2: 標準ライブラリにそのようなクラスがない場合、どの名前が適切だと思いますか? 括弧リムーバー? MultipleTimesIterable? 他に何か?なんで?