以下内容从未在Python 3.6中打印任何内容
from itertools import product, count
for f in product(count(), [1,2]):
print(f)
Run Code Online (Sandbox Code Playgroud)
相反,它只是坐在那里燃烧CPU.问题似乎是,product如果迭代器超过无限空间,则永远不会返回迭代器,因为它product首先评估完整的迭代器.鉴于它product应该是一个发电机,这是令人惊讶的.
我本来期望这开始计数(到无穷大),类似于这个生成器的行为(直接从文档中获取):
for tup in ((x,y) for x in count() for y in [1,2]):
print(tup)
Run Code Online (Sandbox Code Playgroud)
但是,当我的发电机立即开始计数时,使用的发电机product根本不会计数.
其他工具itertools做我期望的.例如,以下内容:
for f in takewhile(lambda x: True, count()):
print(f)
Run Code Online (Sandbox Code Playgroud)
将打印一个数字流因为takewhile是懒惰的.