python - 生成器中的程序控制流程是怎样的?

标签 python python-2.7

<分区>

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

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

当我调用 next(val) 时,Starting 被打印出来,后面跟着数字 5 但在随后的通话中,只有号码被打印出来。为什么我没有看到 Starting?为什么当我调用 next(val) 超过 5 次时它会显示错误?非常感谢任何有助于理解控制流的帮助

最佳答案

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

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

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

关于python - 生成器中的程序控制流程是怎样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56764271/

相关文章:

python - 嗖不要搜索带口音的单词

python - 需要转义 Python 正则表达式中特殊字符后的字符?

java - Python 请求 : POST JSON and file (multiform data) in 1 single request

python - Python 似乎不赞成从不同目录导入的论点是什么?

python - 如何在具有公共(public) IP 但都在 LAN 后面的两台机器之间进行通信(python 解决方案)?

python - 更好地分解 Python 分析

python - 如何在 tkinter ~ python 中放置在网格中的两个小部件之间添加空间?

python - 'SELECT LAST_INSERT_ID()' 处的语法错误

python - 如何更改pip命令的安装路径?如何使用 pip 命令设置安装包的默认 python 目录

python - for 循环内递增键、值对迭代字典