我使用使用可重複填充的迭代器的生成器時出現問題。重新啓動生成器使用可重複填充的迭代器
這裏是我的簡單發電機:
def hi(iterable):
for val in iterable:
yield val
的迭代,我傳進喜發電機是它已經耗盡了它的元素之後,可重新裝填的functional_pipes repo水庫類。
我想消耗喜發電機直到StopIteration異常升高,然後重新填充迭代,然後再使用它像
refillable = Reservoir((1, 2, 3, 4))
hi_iter = hi(refillable)
print(tuple(hi_iter))
refillable((5, 6, 7, 8))
print(tuple(hi_iter))
但這打印
(1, 2, 3, 4)
()
第二元組也應該是(5,6,7,8)。
,我已經找到了唯一的解決方法是用一類
def super_gener(function):
class wrapper_class:
def __init__(self, iterable):
self.iterable = iterable
self.zipped = None
def __iter__(self):
return self
def __next__(self):
try:
return next(self.zipped)
except TypeError:
self.zipped = function(self.iterable)
return next(self)
except StopIteration as err:
self.zipped = None
raise err
return wrapper_class
hi_iter = super_gener(hi)(refillable)
print(tuple(hi_iter))
refillable(data)
print(tuple(hi_iter))
包裹喜生成該解決方案似乎有點過分,我正在尋找一個簡單的解決方案。謝謝你的幫助。
迴應Ptank: 我無法將迭代器保存到元組,因爲迭代器並不總是產生相同的項目,並且在再次填充第二次之前未知項目。
感謝您的輸入!我喜歡這個裝飾器,它可以帶任何發生器。 –