python之yield表达式学习


Posted in Python onSeptember 02, 2014

python中有一个略微奇怪的表达式叫yield expression,本文就来探究一下这是个什么东西。一步一步来。

iterable

mylist = [1,2,3]

for item in mylist:

    print str(item)

mylist是一个列表(list),我们可以逐条取出每一个item,这个过程叫做iteration。像list这样可以用”for…in…”依次遍历的对象被称为iterable,其他的iterable还有string、tuple、dict等。iterable的一个特点是所有的item会存储到内存中,这样会产生一些不便和不利的地方,于是催生了generator(后面讲到)。

list comprehension(列表推导式)

mylist = [x*x for x in range(3)]

表达式右边是一个for循环的简写形式,用[]包裹起来(称为list comprehension),表达式的值是一个list,我们可以像普通list那样使用”for…in…”遍历其元素,如:
for item in mylist:

    print str(item)

generator

generator

对上面的list comprehension稍作修改:

mygenerator = (x*x for x in range(3))

for item in mygenerator:

    print item

可以看到只是把[]换成了(),这时表达式的值不再是list,而是一个generator。

generator也属于iterable,但是其调用方式非常特别。

yield

def creatGenerator():

    mylist = range(3)

    for x in mylist:

        yield x*x

        

mygenerator = creatGenerator()
for x in mygenerator:

    print(x)

yield的使用方法和return是一样的。但是(重点来了):
Python 相关文章推荐
python字符串连接方式汇总
Aug 21 Python
python的Template使用指南
Sep 11 Python
更改Python命令行交互提示符的方法
Jan 14 Python
python轻松实现代码编码格式转换
Mar 26 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
Jun 29 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
利用python修改json文件的value方法
Dec 31 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python实现车牌识别的示例代码
Aug 05 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
python中的hashlib和base64加密模块使用实例
Sep 02 #Python
python多线程编程中的join函数使用心得
Sep 02 #Python
python中的函数用法入门教程
Sep 02 #Python
python爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 #Python
python爬虫入门教程之糗百图片爬虫代码分享
Sep 02 #Python
python批量同步web服务器代码核心程序
Sep 01 #Python
寻找网站后台地址的python脚本
Sep 01 #Python
You might like
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
基于mysql的bbs设计(二)
2006/10/09 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
php 使用array函数实现分页
2015/02/13 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
js身份证验证超强脚本
2008/10/26 Javascript
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python Django批量导入数据
2016/03/25 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
深入理解Python3中的http.client模块
2017/03/29 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
Python tcp传输代码实例解析
2020/03/18 Python
Django nginx配置实现过程详解
2020/09/10 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
《三亚落日》教学反思
2014/04/26 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
《雷雨》教学反思
2016/02/20 职场文书
OpenCV实现反阈值二值化
2021/11/17 Java/Android
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang