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 socket C/S结构的聊天室应用实现
Nov 30 Python
判断网页编码的方法python版
Aug 12 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
Python3实现的简单验证码识别功能示例
May 02 Python
Python get获取页面cookie代码实例
Sep 12 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
Python3使用xlrd、xlwt处理Excel方法数据
Feb 28 Python
python 生成器需注意的小问题
Sep 29 Python
python 检测图片是否有马赛克
Dec 01 Python
Python中tqdm的使用和例子
Sep 23 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
消息持续发送的完整例子
2006/10/09 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
代码生成器 document.write()
2007/04/15 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
jQuery的框架介绍
2016/05/11 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
Python常见异常分类与处理方法
2017/06/04 Python
Python实现Linux中的du命令
2017/06/12 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
Python生成器generator用法示例
2018/08/10 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
Django REST framework内置路由用法
2019/07/26 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
python属于解释语言吗
2020/06/11 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
医德考评自我评价
2014/09/14 职场文书
实习单位指导教师评语
2014/12/30 职场文书
个人工作保证书
2015/02/28 职场文书
田径运动会广播稿
2015/08/19 职场文书
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS