2013-08-31 51 views
1

我试图从文档中了解izip的“等效代码”。izip的示例代码如何工作?

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

由于iterators是一个非空列表,不应该产生一个无限循环吗?
另外我试着把print iterators放到函数的底部,但它从来没有被执行过。为什么?

+0

Martijn给你的答案,但你的另一个问题的答案_“我试着把'print iterators'放到函数的底部,但它从来没有被执行过。”_ - 'yield'将从方法返回;所以除非你把它放在yield之前,否则你的陈述不会被执行。 –

+0

@BurhanKhalid,这不是真的。如果他把它放在函数的底部,使用与yield一样的缩进,它会在下一次调用时执行。 –

回答

3

当一个迭代器耗尽时,它调用StopIteration时调用next()

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

相关问题