Python进阶系列连载(6)——生成器(中)

浏览: 3207

前言

进阶部分连载继续~

如果还没看过我的入门连载部分,先看:

https://ask.hellobi.com/blog/wangdawei/10288


当然,小编的免费入门课程已经有咯,看过连载的朋友可以看看视频再快速梳理一遍~

视频传送门:https://edu.hellobi.com/course/234

图片.png

前文传送门:

Python进阶系列连载(1)——那些容易被忽略的问题(上)

Python进阶系列连载(2)——那些容易被忽略的问题(中)

Python进阶系列连载(3)——那些容易被忽略的问题(下)

Python进阶系列连载(4)——迭代器

Python进阶系列连载(5)——生成器(上)


使用for循环调用生成器


我们使用next()去遍历生成器的时候,我们不知道什么时候会结束

而结束后再使用next()会抛出异常


因为生成器属于迭代器

所以我们可以使用for循环去调用生成器


图片.png


与next()等价的方式


图片.png


这里的__next__()   是两边分别两个英文下滑线


send()强势入场


我们先看一个例子:


图片.png


发现每次运行,除了返回下一个,还会打印出None


观察代码,注意 item = yield i 这句

首先执行等号右边的,yield返回,此时,返回生成器一个对象,并且中断

在下次使用 f.__next__( )时候,并没有传内容进去,所以可以认为yield i 这整个赋值给item的为None

所以item打印出为None


为了做个比较,引入send()


图片.png


send()可以看做next()的增强版

除了可以使用next()功能

还能传入一个值到上次yield断开地方的整体表达式(这里传给是yield i)


send()的坑:


图片.png


这是为什么呢?


大家思考一下!下节课解答~


今天作业:

敲一遍代码,理解一下两种生成器创建方式

自己不敲代码永远学不会写代码

下课

人生苦短,我选Python

未完待续,连载中......

欢迎评论指出文中错误和提问~~~


下一篇链接:Python进阶系列连载(7)——生成器(下)

推荐 5
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

3 个评论

大伟哥,,我觉得这里你要声明一下,a.__next__()中的下划线是两个英文半角下划线。。
哈哈 是啊 容易打成一个下划线
我就打成了一个,难怪我在怀疑自己的笔记本是不是有问题

要回复文章请先登录注册