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中的__new__与__init__魔术方法理解笔记
Nov 08 Python
Python实现的计数排序算法示例
Nov 29 Python
python中的协程深入理解
Jun 10 Python
python命令行工具Click快速掌握
Jul 04 Python
Django  ORM 练习题及答案
Jul 19 Python
python tornado修改log输出方式
Nov 18 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 Python
Python基础数据类型tuple元组的概念与用法
Aug 02 Python
关于python中模块和重载的问题
Nov 02 Python
Python OpenCV形态学运算示例详解
Apr 07 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中文乱码
2009/11/26 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
简单谈谈favicon
2015/06/10 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
解决uWSGI的编码问题详解
2017/03/24 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
使用Python实现分别输出每个数组
2019/12/06 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
品质标语大全
2014/06/21 职场文书
锦旗标语大全
2014/06/23 职场文书
老乡聚会通知
2015/04/23 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书