【发布时间】:2019-05-09 13:04:48
【问题描述】:
我的自定义迭代器应该在调用 next 时调用特定方法。它最初是这样工作的,但是在迭代器上第二次调用 itertools.tee 之后,该方法就没有被调用。
我实际上已经有了解决方案/解决方法,但我想了解问题的根本原因。
class MyIterator(object):
def __init__(self, elements):
self._elements = iter(elements)
def __iter__(self):
return self
def next(self):
element = (self._elements)
if isinstance(element, HwState):
element.el_method()
return element
elements = list(...)
iterator1, iterator2 = itertools.tee(MyIterator(elements))
element1 = next(iterator2) # ok
element2 = next(iterator2) # ok
iterator1, iterator2 = itertools.tee(MyIterator(iterator1))
element1 = next(iterator2) # el_method() is not called but correct element is returned
element2 = next(iterator2) # el_method() is not called but correct element is returned
我这样“解决”了这个问题:
elements = list(...)
iterator = MyIterator(elements)
element1 = next(iterator)
element2 = next(iterator)
iterator = MyIterator(elements)
element1 = next(iterator) # el_method() is called, correct element is returned
element2 = next(iterator) # el_method() is called, correct element is returned
【问题讨论】: