Python 嵌套生成器不工作

标签 python generator

我正在练习生成器,我想知道为什么下面的代码不打印 16 对而只打印 4 对。

def range_generator_function(my_range):
    for i in my_range:
        yield i

gen1=range_generator_function(range(1,5))
gen2=range_generator_function(range(1,5))

def pairs_generator_function(gen1,gen2):
    for it1 in gen1:
        for it2 in gen2:
            yield [it1,it2]

my_gen = pairs_generator_function(gen1,gen2)

for it in my_gen:
    print(it)

输出是

[1, 1]
[1, 2]
[1, 3]
[1, 4]

虽然我期望的输出是

[1, 1]
[1, 2]
[1, 3]
[1, 4]
[2, 1]
[2, 2]
[2, 3]
[2, 4]
[3, 1]
[3, 2]
[3, 3]
[3, 4]
[4, 1]
[4, 2]
[4, 3]
[4, 4]

最佳答案

实际输出是正确的。您的 gen2 实例已被第一个内部循环完全耗尽:

def pairs_generator_function(gen1,gen2):
    for it1 in gen1:
        for it2 in gen2:  # <--- this consumes gen2
            yield [it1,it2]

在随后的迭代中,再次迭代 gen2 是空的。

关于Python 嵌套生成器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203550/

相关文章:

c# - 迭代器和枚举器的区别

python - 为什么 yield 需要 python 生成器?

java - 生成文件中的 MyBatis 异常

python - Pyspark 和 Pandas 是否经过认证可以一起工作?

python - 需要 Microsoft Visual C++ 10.0。通过 "Microsoft Windows SDK 7.1": www. microsoft.com/download/details.aspx?id=8279 获取

python - 如果我切换到自定义用户模型,是否必须迁移所有现有用户帐户?

c - 如何将随机整数的范围从1-10扩大到1-200

python - 递归阶乘函数

python - 在 python 3 中,使用较短的回溯重新引发错误

python - 如何在列表中获取生成器的下一个值(python)