【发布时间】:2017-08-09 09:34:10
【问题描述】:
以下内容在 Python 3.6 中从不打印任何内容
from itertools import product, count
for f in product(count(), [1,2]):
print(f)
相反,它只是坐在那里烧 CPU。问题似乎是product 永远不会返回一个迭代器,如果它在一个无限的空间,因为它首先评估完整的product。考虑到 product 应该是一个生成器,这令人惊讶。
我原以为这会开始计数(到无穷大),类似于这个生成器的行为(取自 directly from the docs):
for tup in ((x,y) for x in count() for y in [1,2]):
print(tup)
但是,虽然我的生成器会立即开始计数,但使用 product 的生成器根本不会计数。
itertools 中的其他工具符合我的预期。例如:
for f in takewhile(lambda x: True, count()):
print(f)
将打印一个数字流,因为takewhile 是惰性的。
【问题讨论】:
-
DeepSpace 的回答具有误导性:据我所知,产品 not 是懒惰的,因为它需要(我假设)无限时间才能返回,而文档按我的预期做。
标签: python python-3.x itertools