我有以下代码
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)
此功能大致等效于以下代码,除外实际的实施不会产生中间结果在内存中
我希望我会看到两行带有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代码中的这一部分:
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]