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 Django模板的使用方法(图文)
Nov 04 Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
对Python中的@classmethod用法详解
Apr 21 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
python实现学生信息管理系统源码
Feb 22 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
解析php常用image图像函数集
2013/06/24 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
JavaScript 题型问答有答案参考
2010/02/17 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
python issubclass 和 isinstance函数
2019/07/25 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
python中有函数重载吗
2020/05/28 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python3处理word文档实例分析
2020/12/01 Python
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
理财投资建议书
2014/03/12 职场文书
医德医风自我评价
2014/09/19 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
初婚初育证明范本
2014/11/24 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python