首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么izip()的这个实现不起作用?

为什么izip()的这个实现不起作用?
EN

Stack Overflow用户
提问于 2012-04-11 22:50:24
回答 1查看 158关注 0票数 8

为了更好地理解Python的生成器,我尝试在itertools模块中实现工具,并在使用izip时遇到麻烦

代码语言:javascript
运行
复制
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

我的代码使用错误行,而参考实现(在手册中给出)使用OK行,没有考虑其他细微的差异。使用下面的代码片段:

代码语言:javascript
运行
复制
for x in izip([1, 2, 3], (4, 5)):
    print x

我的代码输出:

代码语言:javascript
运行
复制
(1, 4)
(2, 5)
(3,)
()
()
...  # indefinite ()

,而预期输出为:

代码语言:javascript
运行
复制
(1, 4)
(2, 5)

请问我的代码出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-11 22:54:10

您的实现不起作用的原因是,由耗尽其中一个可迭代引起的StopIteration异常被抛出在生成器表达式中。它只会终止生成器表达式,而不是封闭的生成器函数。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10108423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档