我正在练习发电机,我想知道为什么以下代码不打印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)
Run Code Online (Sandbox Code Playgroud)
输出是
[1, 1]
[1, 2]
[1, 3]
[1, 4]
Run Code Online (Sandbox Code Playgroud)
虽然我期望的输出是
[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]
Run Code Online (Sandbox Code Playgroud)
实际输出是正确的.您的gen2实例在第一个内部循环中完全耗尽:
def pairs_generator_function(gen1,gen2):
for it1 in gen1:
for it2 in gen2: # <--- this consumes gen2
yield [it1,it2]
Run Code Online (Sandbox Code Playgroud)
在随后的迭代中,gen2再次迭代为空.