Python 请在此示例中解释发电机的力学原理

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和

有人能解释一下为什么它只打印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

而cur
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
[]

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问题: