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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
Python利用IPython提高开发效率
Aug 10 Python
Python使用gRPC传输协议教程
Oct 16 Python
Python API 自动化实战详解(纯代码)
Jun 11 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
Python二元赋值实用技巧解析
Oct 25 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
Pytorch之contiguous的用法
Dec 31 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
python 实现Harris角点检测算法
Dec 11 Python
python删除csv文件的行列
Apr 06 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 变量定义和变量替换的方法
2009/07/30 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
linux中cd命令使用详解
2015/01/08 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
django admin组件使用方法详解
2019/07/19 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
工厂搬迁方案
2014/05/11 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
课外科技活动总结
2014/08/27 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
创先争优演讲稿
2014/09/15 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
认真学习保证书
2015/02/26 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang