有人可以解释为什么它只打印 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
and c2
:
for x in counter_gen(8):
for y in counter_gen(3):
print x, y
c1
并且c2
是生成器对象。您可以遍历它们一次,然后进一步调用next()
将 raise StopIteration
。在口译员中玩耍应该可以让您了解正在发生的事情:
>>> c1 = counter_gen(3)
>>> for item in c1:
pass
>>> c1.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> [i for i in c1] # Exhausted, will immediately raise StopIteration
[]
尝试在循环体中创建一个新的生成器:
for x in counter_gen(8):
for y in counter_gen(3):
print x,y