我正在练习生成器,我想知道为什么下面的代码不打印 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/