相关疑难解决方法(0)

itertools.product是否懒洋洋地评估其参数?

以下内容从未在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是懒惰的.

python python-itertools python-3.x

6
推荐指数
1
解决办法
453
查看次数

标签 统计

python ×1

python-3.x ×1

python-itertools ×1