Python yield使用方法示例


Posted in Python onDecember 04, 2013

1. iterator
叠代器最简单例子应该是数组下标了,且看下面的c++代码:

int array[10];
for ( int i = 0; i < 10; i++ )
    printf("%d ", array[i]);

叠代器工作在一个容器里(array[10]),它按一定顺序(i++)从容器里取出值(array[i])并进行操作(printf("%d ", array[i])。

上面的代码翻译成python:

 

 array = [i for i in range(10)]
for i in array:
    print i,
 

首先,array作为一个list是个容器,其次list这个内建类型有默认的next行为,python发现这些之后采取的秘密的没被各位看到的动作是:拿出array这丫容器的叠代器,从里面next一下把值给i供for循环主体处置,for把这个值print了。

现在的问题是数据可以做容器叠代,代码可以吗?

2. constructor

怎么把函数变成constructor?  在函数体里有yield就行了!

def gen():
    print 'enter'
    yield 1
    print 'next'
    yield 2
    print 'next again'
for i in gen():
    print i

各位!python看到gen函数里出现yield,知道可以用next了,问题是怎么对代码这个容器玩next?
从容器里拿到iterator的时候它还什么也不是,处在容器入口处,对于数组来说就是下标为-1的地方,对于函数来说就是函数入口嘛事没干,但是万事俱备就欠next。
开始for i in g,next让itreator爬行到yield语句存在的地方并返回值,
再次next就再爬到下一个yield语句存在的地方并返回值,依次这样直到函数返回(容器尽头)。
您一定看出来上面代码的输出是:
enter
1
next
2
next again

3. 使用yield
yield的代码叠代能力不但能打断函数执行还能记下断点处的数据,下次next书接上回,
这正是递归函数需要的。
例如中序遍历二叉树:
(应该是David Mertz写的)

def inorder(t):
    if t:
        for x in inorder(t.left):
            yield x
        yield t.label
        for x in inorder(t.right):
            yield x
for n in inorder(tree)
    print n
Python 相关文章推荐
Python基于smtplib实现异步发送邮件服务
May 28 Python
Python读取键盘输入的2种方法
Jun 16 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
python3基于TCP实现CS架构文件传输
Jul 28 Python
Python Numpy:找到list中的np.nan值方法
Oct 30 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
Django实现跨域请求过程详解
Jul 25 Python
Python3直接爬取图片URL并保存示例
Dec 18 Python
python操作yaml说明
Apr 08 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 Python
python函数参数*args**kwargs用法实例
Dec 04 #Python
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 #Python
Python Web框架Pylons中使用MongoDB的例子
Dec 03 #Python
python将xml xsl文件生成html文件存储示例讲解
Dec 03 #Python
python使用reportlab画图示例(含中文汉字)
Dec 03 #Python
python33 urllib2使用方法细节讲解
Dec 03 #Python
python使用mysqldb连接数据库操作方法示例详解
Dec 03 #Python
You might like
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
语义化 H1 标签
2008/01/14 Javascript
js 编写规范
2010/03/03 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
在Python中使用HTML模版的教程
2015/04/29 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
Python金融数据可视化汇总
2017/11/17 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
面试后感谢信
2014/02/01 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
2015年招生工作总结
2015/05/04 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL