Python 为什么这个代码不打印3
以下是David Beazley提供的代码,幻灯片32: 以下是输出: 我知道它不打印4,但为什么不打印3?一旦n被设置为3,下一次迭代应该产生3而不是2?我遗漏了什么?因为,向生成器发送一个值也会导致生成器再前进一步并产生下一个值。值3是在c.send3行生成的,但是您没有对它执行任何操作,因此看不到它。然后在下一次通过while循环时,它会从那里开始倒数。如果将最后一行更改为print c.send3,则会看到3。为,向生成器发送值也会使生成器再前进一步并生成下一个值。值3是在c.send3行生成的,但是您没有对它执行任何操作,因此看不到它。然后在下一次通过while循环时,它会从那里开始倒数。如果将最后一行更改为打印c.send3,则会看到3Python 为什么这个代码不打印3,python,generator,coroutine,Python,Generator,Coroutine,以下是David Beazley提供的代码,幻灯片32: 以下是输出: 我知道它不打印4,但为什么不打印3?一旦n被设置为3,下一次迭代应该产生3而不是2?我遗漏了什么?因为,向生成器发送一个值也会导致生成器再前进一步并产生下一个值。值3是在c.send3行生成的,但是您没有对它执行任何操作,因此看不到它。然后在下一次通过while循环时,它会从那里开始倒数。如果将最后一行更改为print c.send3,则会看到3。为,向生成器发送值也会使生成器再前进一步并生成下一个值。值3是在c.send3
def countdown(n):
print "Counting down from", n
while n >= 0:
newvalue = (yield n)
# If a new value got sent in, reset n with it
if newvalue is not None:
n = newvalue
else:
n -= 1
c = countdown(5)
for n in c:
print n
if n == 5:
c.send(3)