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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
window下eclipse安装python插件教程
Apr 24 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
Python 如何提高元组的可读性
Aug 26 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
python扫描线填充算法详解
Feb 19 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
python中for in的用法详解
Apr 17 Python
Python基于Opencv识别两张相似图片
Apr 25 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读注册表
2006/10/09 PHP
PHPMailer安装方法及简单实例
2008/11/25 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
js 页面执行时间计算代码
2009/03/04 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
js闭包实例汇总
2014/11/09 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python的pip安装以及使用教程
2018/09/18 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
关于圣诞节的广播稿
2014/01/26 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
运动会演讲稿300字
2014/08/25 职场文书
庆六一活动总结
2014/08/29 职场文书
改进工作作风心得体会
2016/01/23 职场文书