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 生成器的主要内容,如果未能解决你的问题,请参考以下文章