yield 生成器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yield 生成器相关的知识,希望对你有一定的参考价值。

如下,如果没有生成器 yield ,那么我们执行函数的时候会 print 出来,但是如果我们不想打印出来呢,我们只是想先调用函数,等到指定的时刻再让它执行函数里的语句,我们可以使用生成器,当我们执行生成器的 next() 方法时,会执行 yield 1 上面的语句,这时就会打印出 abc ;当我们再执行 next() 方法时,会执行 yield 2 上面的语句打印出 def ,以此类推,这样,我们就能随时控制什么时候执行什么语句,这就是生成器的作用

In [6]: def fun():
   ...:     print abc
   ...:     yield 1
   ...:     print def
   ...:     yield 2
   ...:     print ghi
   ...:     yield 3
   ...:     

In [7]: fun()        # 因为有 yield 所以产生的是一个生成器对象
Out[7]: <generator object fun at 0x21223c0>

In [8]: a = fun()    # 我们进行实例化

In [9]: a.next()     # 当我们执行生成器的 next() 方法时,会执行 yield 1 上面的语句,这时就会返回 abc 并打印出 yield 后面指定的 1
abc
Out[9]: 1

In [10]: a.next()    # 当我们再执行 next() 方法时,就从上次中断的地方继续执行语句,这时就会返回 def 并打印出 yield 后面指定的 2
def
Out[10]: 2

In [11]: a.next()
ghi
Out[11]: 3 In [
12]: a.next() # 当所有语句执行完之后就为空了,再继续执行就会报错 --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-12-aa817a57a973> in <module>() ----> 1 a.next() StopIteration: In [13]: a = fun() # 我们也可以通过 for 循环的方法来遍历执行函数内的语句 In [14]: for i in a: ....: print i ....: abc 1 def 2 ghi 3

 

 

 

 

 

     

以上是关于yield 生成器的主要内容,如果未能解决你的问题,请参考以下文章

关于生成器---(yield)

python生成器中yield和send分析

生成器与yield

生成器与yield

生成器

生成器函数