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 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
python实现八大排序算法(1)
Sep 14 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
使用python为mysql实现restful接口
Jan 05 Python
简单谈谈python中的lambda表达式
Jan 19 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
Jun 04 Python
更新修改后的Python模块方法
Mar 03 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
django 外键创建注意事项说明
May 20 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和.net的区别
2014/09/28 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
Vue实现购物车功能
2017/04/27 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python3 shelve模块的详解
2017/07/08 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python实现反转部分单向链表
2018/09/27 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
Python发展史及网络爬虫
2019/06/19 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
大学毕业登记表自我鉴定
2013/10/09 职场文书
行政经理岗位职责
2013/11/09 职场文书
采购主管工作职责
2013/12/12 职场文书
作文评语大全
2014/04/23 职场文书
新兵入伍心得体会
2014/09/04 职场文书
作风大整顿心得体会
2014/09/10 职场文书
标准版离职证明书
2014/09/12 职场文书
机关职员工作检讨书
2014/10/23 职场文书
清洁工岗位职责
2015/02/13 职场文书
个人自荐书怎么写
2015/03/26 职场文书
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript