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中利用sorted()函数排序的简单教程
Apr 27 Python
Python打印斐波拉契数列实例
Jul 07 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
python 字符串转列表 list 出现\ufeff的解决方法
Jun 22 Python
Python方法的延迟加载的示例代码
Dec 18 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
python和c语言的主要区别总结
Jul 07 Python
pycharm修改文件的默认打开方式的步骤
Jul 29 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
如何基于Python批量下载音乐
Nov 11 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
php结合表单实现一些简单功能的例子
2011/06/04 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
python检查指定文件是否存在的方法
2015/07/06 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
python控制台中实现进度条功能
2015/11/10 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
python3实现windows下同名进程监控
2018/06/21 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
python3 配置logging日志类的操作
2020/04/08 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
施工资料员的岗位职责
2013/12/22 职场文书
护理专业求职信
2014/06/15 职场文书
2014年工程师工作总结
2014/11/25 职场文书
关于分班的感言
2015/08/04 职场文书
《分数乘法》教学反思
2016/02/24 职场文书