Python Itertools.product Building中间层在内存中的结果?

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

我有以下代码

来自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产品(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”
字符串中的字符创建另一个元组),然后从池中的元组生成结果(使用这些元组的索引数组)