python笔记 生成器特点

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

0 环境

  • 编辑器:idea或vscode
  • 系统版本:windows10
  • python版本:3.9.6

1 前言

之前的一步步debug,发现生成器的运行方式,并且描述了它的想像,现在归纳一下特点。

2 特点/规律

有四条规则/特点,如下:

  • 生成器函数执行时,并不会执行函数体(注意哈,这里说的不是生成器执行的时候,而是执行生成器函数的时候)
  • 当使用next方法的时候,当前代码向下执行,当遇到第一个yield关键字的时候,它会出值,并会暂停函数。
  • 当再次执行next方法的时候,会从上次暂停的地方开始往下执行。如下图:

执行第二个next方法时。 image.png

是不是就验证了,从上次暂停的位置开始往下执行。 image.png

  • 当yield已经全部被执行完成了,再次执行yield的时候,会有StopIteration的报错信息,但是该函数有返回值的情况的话,函数的返回当作异常的value,也就是这种的StopIteration 3(函数的返回值)。如下图:

image.png

3 总结

来个不恰当的比喻,比如我制定了计划,这个计划表内呢,有yield 早上散步,yield 晚上跑步,明天开始执行(第二天计划表生效),当第二天的6点钟的闹钟响起(执行第一个next方法),立马执行计划表里的任务,当早上的散步结束,开始回来了(第一个yield结束了),计划表停在早上散步这格了,你在为自己打气,好好休息,晚上还要跑步,一定要努力减肥呢,当晚上的7点的钟声响起时(执行next方法),你不得不立马爬起来,执行计划表下一个任务,直到跑步结束后,计划表停在晚上跑步这格了,这时计划表里么有yield任务了。还有两种情况,不过再往下反转就可能是个减肥失败的故事了,自行脑补。

猜你喜欢

转载自juejin.im/post/7127095316519583775