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装饰器的函数式编程详解
Feb 27 Python
Python Requests 基础入门
Apr 07 Python
Python编程之event对象的用法实例分析
Mar 23 Python
python TKinter获取文本框内容的方法
Oct 11 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python多项式回归的实现方法
Mar 11 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
jupyter notebook tensorflow打印device信息实例
Apr 20 Python
深度学习tensorflow基础mnist
Apr 14 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
生成sessionid和随机密码的例子
2006/10/09 PHP
PHP 中关于ord($str)>0x80的详细说明
2012/09/23 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
GreyBox技术总结(转)
2010/11/23 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
python中map、any、all函数用法分析
2015/04/21 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
python实现桌面托盘气泡提示
2019/07/29 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
python super函数使用方法详解
2020/02/14 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
雷锋精神演讲稿
2014/05/13 职场文书
毕业生自荐信范文
2015/03/05 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
2015年征兵工作总结
2015/07/23 职场文书
结婚主持人致辞
2015/07/28 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js