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通过get,post方式发送http请求和接收http响应的方法
May 26 Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
解决python 文本过滤和清理问题
Aug 28 Python
python flask中动态URL规则详解
Nov 22 Python
如何在django中添加日志功能
Feb 06 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
Python: glob匹配文件的操作
Dec 11 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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
获得Google PR值的PHP代码
2007/01/28 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
非常实用的php验证码类
2016/05/15 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
JavaScript实现网页动态生成表格
2020/11/25 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
Python  连接字符串(join %)
2008/09/06 Python
理论讲解python多进程并发编程
2018/02/09 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
机电一体化专业求职信
2014/07/22 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
写给医生的感谢信
2015/01/22 职场文书
初三英语教学计划
2015/01/23 职场文书
大学生受助感言
2015/08/01 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书