Чтобы лучше понять генератор Python, я пытаюсь внедрить средства в модуль itertools
и столкнулся с проблемой izip
:
def izip(*iterables):
its = tuple(iter(it) for it in iterables)
while True:
yield tuple(next(it) for it in its) # ERROR
# yield tuple(map(next, its)) # OK
. В моем коде используется строка ERROR и эталонная реализация (, приведенная в manual)использует строку OK, не принимая во внимание другие мелкие отличия. С этим фрагментом:
for x in izip([1, 2, 3], (4, 5)):
print x
Мой код выводит:
(1, 4)
(2, 5)
(3,)
()
()
... # indefinite ()
, в то время как ожидаемый вывод:
(1, 4)
(2, 5)
Что не так с моим кодом, пожалуйста?