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 列表(List)操作方法详解
Mar 11 Python
python字符串替换的2种方法
Nov 30 Python
小议Python中自定义函数的可变参数的使用及注意点
Jun 21 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
Python 寻找局部最高点的实现
Dec 05 Python
python 字典访问的三种方法小结
Dec 05 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
python 如何快速复制序列
Sep 07 Python
flask框架中的cookie和session使用
Jan 31 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
JavaScript去掉空格的方法集合
2010/12/28 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python随机读取文件实现实例
2017/05/25 Python
基于Python的OCR实现示例
2020/04/03 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
行政经理岗位职责
2013/11/09 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
单位工作证明
2014/10/07 职场文书
大学运动会加油稿
2015/07/22 职场文书
初中同学会致辞
2015/08/01 职场文书
超市店长竞聘书
2015/09/15 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript