Python yield使用方法示例

 更新时间:2013年12月04日 11:01:20   作者:  
这篇文章主要介绍了Python yield使用方法,大家参考使用吧

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下opencv图像阈值处理的使用笔记

    Python下opencv图像阈值处理的使用笔记

    这篇文章主要介绍了Python下opencv图像阈值处理的使用笔记,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python利用matplotlib绘制折线图的新手教程

    Python利用matplotlib绘制折线图的新手教程

    这篇文章主要给大家介绍了关于Python利用matplotlib绘制折线图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python selenium使用autoIT上传附件过程详解

    Python selenium使用autoIT上传附件过程详解

    这篇文章主要介绍了Python selenium使用autoIT上传附件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python标准库sys库常用功能详解

    Python标准库sys库常用功能详解

    这篇文章主要介绍了Python标准库sys库常用功能详解,sys是Python提供的程序与解释器交互的标准库,文章围绕主题展开相关介绍,需要的朋友可以参考一下
    2022-07-07
  • python 实现的IP 存活扫描脚本

    python 实现的IP 存活扫描脚本

    这篇文章主要介绍了python 实现的IP 存活扫描脚本,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • Python 内置logging 使用详细介绍

    Python 内置logging 使用详细介绍

    提供日志记录的接口和众多处理模块,供用户存储各种格式的日志,帮助调试程序或者记录程序运行过程中的输出信息,这篇文章主要介绍了Python 内置logging 使用讲解,需要的朋友可以参考下
    2022-07-07
  • python引入其他文件夹下的py文件具体方法

    python引入其他文件夹下的py文件具体方法

    在本篇文章里小编给大家整理的是一篇关于python引入其他文件夹下的py文件具体方法,有兴趣朋友们可以跟着学习参考下。
    2021-05-05
  • Python中创建相关系数矩阵的方法小结

    Python中创建相关系数矩阵的方法小结

    相关系数矩阵是一种用于衡量变量之间关系的重要工具,本文将介绍在 Python 中创建相关系数矩阵的不同方法,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • Python正则表达式匹配数字和小数的方法

    Python正则表达式匹配数字和小数的方法

    这篇文章主要介绍了Python正则匹配数字和小数的方法,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • python json.dumps中文乱码问题解决

    python json.dumps中文乱码问题解决

    这篇文章主要介绍了如何解决python中中文乱码问题和json.dumps中文乱码问题,需要的朋友可以参考下
    2021-05-05

最新评论