python - 生成器中的程序控制流程如何?
问题描述
我试图在定义生成器时了解控制流程。
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 异常。
推荐阅读
- android - 构建android-ionic 3时在highcharts中使用innerSize时出错
- html - 如何将带有乌尔都语文本(Unicode)的 HTML 表格导出为 PDF?
- php - 从 API 获取多个值并将它们相加
- ffmpeg - 使用 FFMpeg 在图像上覆盖具有透明度的 webm
- pandas - 切断熊猫数据框中阈值的值
- r - 在 rmarkdown 的 hist 函数中使用 add = TRUE 时出错
- ios - WebCore WebCore::GraphicsContext3D::reshape(int, int)
- android - Gradle 构建失败:找不到方法 org.gradle.tooling.model.gradle.GradleBuild.getIncludedBuilds
- hive - Hive INSERT INTO vs UNION ALL 性能
- python - Slack API - rtm_connect 错误