Itertools.product buiding中间结果存储在内存中?

问题描述 投票:1回答:1

我有以下代码

from itertools import product
from time import sleep
def slowrange(n,t):
        for i in range(n):
                sleep(t)
                yield i

for n,w in product(slowrange(5,0.2),"AB"):
        print(n,w)

因为itertools.product doc中说:

此功能大致等效于以下代码,除外实际的实施不会产生中间结果在内存中

我希望我会看到两行带有0 A \n 0 B,然后在0.2秒后看到以下迭代,但是,如果我使用以下函数而不是itertools,则在打印所有迭代后1s不会发生.product,它确实会执行所需的行为:

def product(itertor1,iterator2):
        for s in iterator1:
                for f in iterator2:
                        yield s,f

所以,这是怎么回事?,这是一个错误吗?文档中有什么问题吗?

python itertools
1个回答
2
投票

中间结果没有在内存中建立,没有。那是指Python代码中的这一部分:

result = [[]]
for pool in pools:
    result = [x+[y] for x in result for y in pool]
© www.soinside.com 2019 - 2024. All rights reserved.