我正在尝试从文档中了解izip
的“等效代码”。
def izip(*iterables):
# izip('ABCD', 'xy') --> Ax By
iterators = map(iter, iterables)
while iterators:
yield tuple(map(next, iterators))
由于iterators
是非空列表,这不应该产生无限循环吗?
我还尝试将print iterators
放在函数的底部,但它从未执行过。为什么呢?
答案 0 :(得分:3)
当迭代器用尽时,在调用StopIteration
时会引发next()
。
因此,tuple(map(next, iterators))
会将StopIteration
异常传播给调用者,从而中断无限循环。