查看原文
其他

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

2017-12-19 王大伟 Python爱好者社区

作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei


前文传送门:

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

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

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

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

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


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

Python从零开始系列连载(25)——Python的random模块简单使用(入门知(姿)识(势)学习的最后一篇(片))


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

视频传送门:点击文末阅读原文


使用for循环调用生成器


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

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


因为生成器属于迭代器

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



与next()等价的方式



send()强势入场


我们先看一个例子:



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


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

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

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

所以item打印出为None


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



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

除了可以使用next()功能

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


send()的坑:



这是为什么呢?


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


今天作业:

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

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

下课

人生苦短,我选Python

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

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


小编的免费Python入门课程已经登场,等你来撩~

已经2000+小伙伴加入学习啦~

点击阅读原文,立即学习

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

0.小编的Python入门视频课程!!!

1.崔老师爬虫实战案例免费学习视频。

2.丘老师数据科学入门指导免费学习视频。

3.陈老师数据分析报告制作免费学习视频。

4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

5.丘老师Python网络爬虫实战免费学习视频。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存