作家
登录

Python Yield Generator详解

作者: 来源: 2017-07-28 13:19:27 阅读 我要评论

一些编程场景中,一件工作可能须要履行一部分逻辑,然后等待一段时光、或者等待某个异步的结不雅、或者等待某个状况,然后持续履行另一部分逻辑。比如微办事架构中,办事A履行了一段逻辑之后,去办事B请求一些数据,然后在办事A上持续履行。或者在游戏编程中,一个技能分成分多段,先履行一部分动作(效不雅),然后等待一段时光,然后再持续。对于这种须要等待、而又不欲望壅塞的情况,我们一般应用回调(callback)的方法。下面举一个简单的例子:

Python Yield Generator详解

本文将由浅入深具体介绍yield以及generator,包含以下内容:什么generator,生成generator的办法,generator的特点,generator基本及高等应用处景,generator应用中的留意事项。本文不包含enhanced generator即pep342相干内容。

generator基本

generator高等应用

在python的函数(function)定义中,只要出现了yield表达式(Yield expression),那么事实上定义的是一个generator function, 调用这个generator function返回值是一个generator。这根通俗的函数调用有所差别,For example:

  1. def gen_generator(): 
  2.  
  3.     yield 1 
  4.  
  5.   
  6.  
  7. def gen_value(): 
  8.  
  9.     return 1 
  10.  
  11.      
  12.  
  13. if __name__ == '__main__'
  14.  
  15.     ret = gen_generator() 
  16.  
  17.     print ret, type(ret)    #<generator object gen_generator at 0x02645648> <type 'generator'
  18.  
  19.     ret = gen_value() 
  20.  
  21.     print ret, type(ret)    # 1 <type 'int' 

大年夜膳绫擎的代码可以看出,gen_generator函数返回的是一个generator实例,generator有以下特别:

  • 遵守迭代器(iterator)协定,迭代器协定须要实现__iter__、next接口
  • 能过多次进入、多次返回,可以或许暂停函数体中代码的履行

下面看一下测试代码:

  1. >>> def gen_example(): 
  2.  
  3. ...     print 'before any yield' 
  4.  
  5. ...     yield 'first yield' 
  6.  
  7. ...     print 'between yields' 
  8.  
  9. ...     yield 'second yield' 
  10.  
  11. ...     print 'no yield anymore' 
  12.  
  13. ... 
  14.  
  15. >>> gen = gen_example() 
  16.  
  17. >>> gen.next()# 第一次调用next 
  18.  
  19. before any yield 
  20.  
  21. 'first yield' 
  22.  
  23. >>> gen.next()# 第二次调用next 
     1/8    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      化繁为简 海云捷迅为企业提供应用OpenStack新“姿势”

    在版本进级方面,OpenStack每半年就会宣布一个版本,这是它的立异过程,但企业客户更多求稳,不会过快的进行迭代进级。海云捷迅底层技巧是每两年一个版本,首版是基于OpenStack的E版本,二版本是H版,三版本是基于社>>>详细阅读


    本文标题:Python Yield Generator详解

    地址:http://www.17bianji.com/lsqh/36457.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)