Python 请在此示例中解释发电机的力学原理
有人能解释一下为什么它只打印3行而不是24行吗。我知道这是由于发电机的功能耗尽,但如何呢Python 请在此示例中解释发电机的力学原理,python,generator,Python,Generator,有人能解释一下为什么它只打印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 def计数器(尺寸): cur=1 而curc1和
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
def计数器(尺寸):
cur=1
而curc1
和c2
是生成器对象。您可以对它们迭代一次,然后进一步调用next()
将引发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
[]
c1
和c2
是生成器对象。您可以对它们迭代一次,然后进一步调用next()
将引发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
[]
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
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
哦,我怎么完全忽略了这一点,并开始合理化,它必须以一种对我来说毫无意义的方式共享状态。谢谢你们,这澄清了一切。哦,我怎么完全忽略了这一点,并开始合理化它必须以一种对我来说毫无意义的方式共享状态。谢谢,这就澄清了问题。如果你想对生成器进行详细的解释,那么这个主题就是这个网站上排名最高的python问题:如果你想对生成器进行详细的解释,那么这个主题就是这个网站上排名最高的python问题: