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操作xml文件详细介绍
Jun 09 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
Oct 08 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
Python3几个常见问题的处理方法
Feb 26 Python
python3.6 如何将list存入txt后再读出list的方法
Jul 02 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 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树形菜单代码
2014/11/19 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
JSON 数据格式介绍
2012/01/13 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python简单计算文件夹大小的方法
2015/07/14 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
试述DBMS的主要功能
2016/11/13 面试题
医学生求职自荐信
2013/10/25 职场文书
自荐信不宜过于夸大
2013/11/06 职场文书
学术会议邀请函
2015/01/30 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android