手机
当前位置:查字典教程网 >脚本专栏 >python >Python yield使用方法示例
Python yield使用方法示例
摘要:1.iterator叠代器最简单例子应该是数组下标了,且看下面的c++代码:复制代码代码如下:intarray[10];for(inti=0...

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 yield使用方法示例】相关文章:

Python使用urllib2获取网络资源实例讲解

python list中append()与extend()用法分享

Python完全新手教程

Python列表推导式的使用方法

python list 合并连接字符串的方法

如何运行Python程序的方法

Python translator使用实例

跨平台python异步回调机制实现和使用方法

python将xml xsl文件生成html文件存储示例讲解

python迭代器的使用方法实例

精品推荐
分类导航