izip的示例代码如何工作?

时间:2013-08-31 19:55:39

标签: python generator

我正在尝试从文档中了解izip的“等效代码”。

def izip(*iterables):
    # izip('ABCD', 'xy') --> Ax By
    iterators = map(iter, iterables)
    while iterators:
        yield tuple(map(next, iterators))

由于iterators是非空列表,这不应该产生无限循环吗? 我还尝试将print iterators放在函数的底部,但它从未执行过。为什么呢?

1 个答案:

答案 0 :(得分:3)

当迭代器用尽时,在调用StopIteration时会引发next()

因此,tuple(map(next, iterators))会将StopIteration异常传播给调用者,从而中断无限循环。