Skip to main content
 首页 » 编程设计

python之请在此示例中解释生成器机制

2025年05月04日19daizhj

有人能解释一下为什么它只打印 3 行而不是 24 行的机制吗?我知道这是因为生成器函数已耗尽,但这是怎么回事?

def counter_gen(size): 
    cur=1 
    while cur <= size: 
        yield cur 
        cur +=1 
 
c1=counter_gen(8) 
c2=counter_gen(3) 
 
for x in c1: 
    for y in c2: 
        print x,y 

请您参考如下方法:

c2 在 3 次迭代后到达终点。再次迭代它不会做任何事情。这就是“耗尽”迭代器的意思。所以,在三个项目之后,它停止了。您的外部迭代器进行了 8 次,但是因为内部迭代器只进行了 3 次,所以只有第一个外部迭代器执行任何操作。接下来的 7 次尝试遍历耗尽的迭代器,但没有任何反应。

如果您希望c2 的新 迭代从c1 的每次迭代开始,只需这样写即可!

c1=counter_gen(8) 
 
for x in c1: 
    c2=counter_gen(3) 
    for y in c2: 
        print x, y 

或者,完全取消 c1 和 c2:

for x in counter_gen(8): 
    for y in counter_gen(3): 
        print x, y