首页 > 解决方案 > 生成器中的程序控制流程如何?

问题描述

我试图在定义生成器时了解控制流程。

def countdown(num)
    print('Starting')
    while num > 0:
        yield num
          num -= 1
val = countdown(5)

当我打电话时next(val)Starting会打印数字 5,但在随后的电话中,只会打印数字。为什么我没有看到Starting?为什么当我调用next(val)超过 5 次时它会显示错误?任何有助于理解控制流的帮助将不胜感激

标签: pythonpython-2.7

解决方案


第一次调用next()时,从函数体的开头开始执行,直到下一个 yield 语句返回该语句右侧的值。

后续调用next()从 yield 语句继续到函数的结尾,然后循环并从 while 循环的开头继续,直到yield调用另一个。

如果没有调用 yield (在您的情况下,这意味着您不会进入 while 函数,因为num <= 0)将引发 StopIteration 异常。


推荐阅读