`
m4774411wang
  • 浏览: 107794 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

python yield和generators(生成器)

阅读更多

在python中,yield就是这样的一个生成器。

yield 生成器的运行机制
当 你问生成器要一个数时,生成器会执行,直至出现 yield 语句,生成器把 yield 的参数给你,之后生成器就不会往下继续运行。 当你问他要下一个数时,他会从上次的状态。开始运行,直至出现yield语句,把参数给你,之后停下。如此反复 直至退出函数。(以上关于yield的描述,在后面列举一个简单的例子来解释这段话)。

yield的使用
在python中,当你定义一个函数,使用了yield关键字时,这个函数就是一个生成器,它的执行会和其他普通的函数有很多不同,函数返回的是一个对象,而不是你平常 所用return语句那样,能得到结果值。如果想取得值,那得调用next()函数,如:

    c = h() #h()包含了yield关键字  
    #返回值  
   print  c.next() 

比如有的for in 操作的话,会自动的调用生成器的.next()方法。

每当调用一次迭代器的next函数,生成器函数运行到yield之处,返回yield后面的值且在这个地方暂停,所有的状态都会被保持住,直到下次next函数被调用,或者碰到异常循环退出。

下面,来看看以下的例子代码吧,是用来说明yield运行机制的。

#encoding=utf-8

def fib(max):
   a, b = 1, 1
   while a < max:
       yield a #generators return an iterator that returns a stream of values.
       a, b = b, a+b

for n in fib(15):
   print n
 

从前面的运行机制描述中,可以获知,程序运行到yield这行时,就不会继续往下执行。而是返回一个包含当前函数所有参数的状态的iterator对象。目的就是为了第二次被调用时,能够访问到函数所有的参数值都是第一次访问时的值,而不是重新赋值。

程序第一次调用时:

yield a #这时a,b值分别为1,1,当然,程序也在执行到这停止并且返回。

程 序第二次调用时: 从前面可知,第一次调用时,a,b=1,1,那么,我们第二次调用时(其实就是调用第一次返回的iterator对象的next()方法),程序跳到 yield语句处, 执行a,b = b, a+b语句,此时值变为:a,b = 1, (1+1) => a,b = 1, 2 程序继续while循环,当然,再一次碰到了yield a 语句,也是像第一次那样,保存函数所有参数的状态,返回一个包含这些参数状态的iterator对象。

等待第三次的调用。

通过上面的分析,可以一次类推的展示了yield的详细运行过程了!

分享到:
评论

相关推荐

    Python中yield返回生成器的详细方法.pdf

    Python中yield返回生成器的详细方法

    详解Python3中yield生成器的用法

    任何使用yield的函数都称之为生成器,如: def count(n): while n &gt; 0: yield n #生成值:n n -= 1   另外一种说法:生成器就是一个返回迭代器的函数,与普通函数的区别是生成器包含yield语句,更简单点理解...

    python生成器和迭代器区别

    一、生成器 1.1 什么是生成器 generator:一边生成一边计算后面元素的机制,称为生成器,生成器...带有yield的函数称为函数生成器 下面通过代码实现一个斐波那契数列(除第1个,第2个数外,其他的数都是前两个数相加) e

    举例详解Python中yield生成器的用法

    yield是生成的意思,但是在python中则是作为生成器理解,生成器的用处主要可以迭代,这样简化了很多运算模型(还不是很了解是如何简化的)。 yield是一个表达式,是有返回值的. 当一个函数中含有yield时,它不再是一个...

    Python yield生成器和return对比代码实例

    迭代是Python最强大的功能之一,是...生成器是特殊的迭代器 def gen_yield(): for i in range(1,10): for j in range(1,10): yield i+j # return i+j if __name__ == '__main__': aa = gen_yield() print(aa.__

    python中yield的用法.docx

    Python中有一个非常有用的语法叫做生成器,用到的关键字就是yield。yield的作用是把一个函数变成生成器(generator),起到一个延迟的作用。Python是常用的一种编程语言,编程过程中,变成generator的函数,在每次...

    Python yield 使用浅析

    您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念。 如何生成斐波那契數列 斐波那契(Fibonacci)數...

    Python中生成器和yield语句的用法详解

    但是有一些话题,大多数学生只有很少,或者完全没有任何接触,尤其是“生成器和yield关键字”。我猜这对大多数新手Python程序员也是如此。 有事实表明,在我花了大功夫后,有些人仍然不能理解生成器和yield关键字。...

    Python生成器传参数及返回值原理解析

    在python中,带yield的方法不再是普通方法,而是生成器,它的执行顺序不同与普通方法. 普通方法的执行是从头到尾,最后return返回,或者没有返回值 生成器是到yield就返回yield之后的值,然后阻塞,等待next()/send()继续调...

    python3.6生成器yield用法实例分析

    主要介绍了python3.6生成器yield用法,结合实例形式分析了Python3.6中生成器yield的功能、用法及相关操作注意事项,需要的朋友可以参考下

    Python yield与实现方法代码分析

    yield的功能类似于return,但是不同之处在于它返回的是生成器。 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器)。 如果一个函数包含yield关键字,...

    初步解析Python中的yield函数的用法

    主要介绍了Python中的yield函数,yield函数是生成器中的一个常用函数,本文来自于IBM官方网站的开发者文档的翻译,需要的朋友可以参考下

    python中yield的认识与学习|生成器

    就是一个生成器函数。 类型: 白话,他跟return的区别就是。他会为用户保留一个断点。return,程序执行一次之后,就会一切重新开始。然而,yield却会在上一次保留一个断点。方便下次使用。 具体,读懂这个简单代码就...

    Python中的生成器和yield详细介绍

    列表推导与生成器表达式 当我们创建了一个列表的时候,就创建了一个可以迭代的对象: 复制代码 代码如下: &gt;&gt;&gt; squares=[n*n for n in range(3)] &gt;&gt;&gt; for i in squares:  print i   0 1 4 这种创建列表的操作很常见...

    Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例

    主要介绍了Python 生成器,迭代,yield关键字,send()传参给yield语句操作,结合实例形式分析了Python生成器、迭代、yield关键字及异常处理相关操作技巧,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics