Почему эта реализация izip()не работает?

Чтобы лучше понять генератор 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)

Что не так с моим кодом, пожалуйста?

8
задан wdscxsj 11 April 2012 в 14:50
поделиться