最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Pythonyield使用方法示例

来源:动视网 责编:小采 时间:2020-11-27 14:39:00
文档

Pythonyield使用方法示例

Pythonyield使用方法示例:1. iterator叠代器最简单例子应该是数组下标了,且看下面的c++代码: 代码如下:int array[10];for ( int i = 0; i printf(%d , array[i]); 叠代器工作在一个容器里(array[10]),它按一定顺序(i++)从容器里取出值(array[i])并进行操
推荐度:
导读Pythonyield使用方法示例:1. iterator叠代器最简单例子应该是数组下标了,且看下面的c++代码: 代码如下:int array[10];for ( int i = 0; i printf(%d , array[i]); 叠代器工作在一个容器里(array[10]),它按一定顺序(i++)从容器里取出值(array[i])并进行操


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

文档

Pythonyield使用方法示例

Pythonyield使用方法示例:1. iterator叠代器最简单例子应该是数组下标了,且看下面的c++代码: 代码如下:int array[10];for ( int i = 0; i printf(%d , array[i]); 叠代器工作在一个容器里(array[10]),它按一定顺序(i++)从容器里取出值(array[i])并进行操
推荐度:
标签: 使用 例子 说明
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top