Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这个代码不打印3_Python_Generator_Coroutine - Fatal编程技术网

Python 为什么这个代码不打印3

Python 为什么这个代码不打印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

以下是David Beazley提供的代码,幻灯片32:

以下是输出:

我知道它不打印4,但为什么不打印3?一旦n被设置为3,下一次迭代应该产生3而不是2?我遗漏了什么?

因为,向生成器发送一个值也会导致生成器再前进一步并产生下一个值。值3是在c.send3行生成的,但是您没有对它执行任何操作,因此看不到它。然后在下一次通过while循环时,它会从那里开始倒数。如果将最后一行更改为print c.send3,则会看到3。

为,向生成器发送值也会使生成器再前进一步并生成下一个值。值3是在c.send3行生成的,但是您没有对它执行任何操作,因此看不到它。然后在下一次通过while循环时,它会从那里开始倒数。如果将最后一行更改为打印c.send3,则会看到3

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)