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基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
Python类定义和类继承详解
May 08 Python
python使用reportlab实现图片转换成pdf的方法
May 22 Python
Python中的id()函数指的什么
Oct 17 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 Python
python_tkinter弹出对话框创建
Mar 20 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 Python
Python使用Web框架Flask开发项目
Jun 01 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二维数组用键名分组相加实例函数
2013/11/06 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
详解python中asyncio模块
2018/03/03 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
详解Python self 参数
2019/08/30 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
艺术专业大学生自我评价
2013/09/22 职场文书
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
教师节校长致辞
2015/07/31 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
MySQL分库分表详情
2021/09/25 MySQL
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers