码迷,mamicode.com
首页 > 其他好文 > 详细

yield 生成器

时间:2017-10-27 21:31:17      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:ipy   rac   cal   ext   执行   pytho   int   地方   ...   

如下,如果没有生成器 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 生成器

标签:ipy   rac   cal   ext   执行   pytho   int   地方   ...   

原文地址:http://www.cnblogs.com/pzk7788/p/7745132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!