Python Itertools.product Building中间层在内存中的结果?
我有以下代码 来自itertools导入产品的Python Itertools.product Building中间层在内存中的结果?,python,itertools,Python,Itertools,我有以下代码 来自itertools导入产品的 从时间上导入睡眠 def慢行(n,t): 对于范围(n)中的i: 睡眠(t) 产量一 对于产品中的n,w(Slogrange(5,0.2),“AB”): 打印(n,w) 因为在书中说: 此函数大致相当于以下代码,除了 实际实施不会产生中间结果 内存中 我希望我会看到两行0a\n 0b,然后0.2秒后我会看到以下迭代,但是,这不会发生,1s后所有迭代都打印出来,如果我使用以下函数而不是itertools.product,它会执行所需的行为: def
从时间上导入睡眠
def慢行(n,t):
对于范围(n)中的i:
睡眠(t)
产量一
对于产品中的n,w(Slogrange(5,0.2),“AB”):
打印(n,w)
因为在书中说:
此函数大致相当于以下代码,除了
实际实施不会产生中间结果
内存中
我希望我会看到两行0a\n 0b
,然后0.2秒后我会看到以下迭代,但是,这不会发生,1s后所有迭代都打印出来,如果我使用以下函数而不是itertools.product,它会执行所需的行为:
def产品(itertor1、迭代器2):
对于迭代器1中的s:
对于迭代器2中的f:
产量s,f
那么,发生了什么?这是一个bug吗?文档中有问题吗?中间结果没有建立在内存中,不是。这是指Python代码中的这一部分:
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
实际情况是,输入迭代器被转换为池中的元组,第一行:
pools = [tuple(pool) for pool in args] * repeat
这些池不是中间结果。您的slowrange()
首先被消费到一个元组中(从“AB”
字符串中的字符创建另一个元组),然后从池中的元组生成结果(使用这些元组的索引数组)