生成器与迭代器

迭代器(Iterator)

  • 定义:定义了__iter__和next方法的对象,其中要求__iter__方法返回对象自身。这就是python内部所遵循的迭代协议。

另一个相近的概念即可迭代对象(Iterable:返回一个迭代器的对象),其和容器一样都只是一个抽象的概念,不属于具体的数据结构。

 

  • 可以从collections模块中导入Iterator和Iterable来判断一个对象是否属于迭代器和可迭代对象。
  • 可以利用iter内置函数将一个可迭代对象转换为迭代器

生成器(generator)

  • 生成器是一种特殊的迭代器,其每一次迭代的值都是有生成器函数得到的。生成器会记录每一次迭代进入和退出的状态。
  • 特点:
    • 节省空间
    • 只能迭代一次
  • 定义方式:
    • 生成器表达式(例如:( i for i in range(10))
    • 生成器函数(yield
  • 生成器每次迭代的值由yield返回,结束时抛出StopIteration异常,并可以通过return返回异常信息
  • 由于生成器会记录每一迭代进入和退出的状态,结合send方法就可以实现并发计算

 

详细参考:

http://www.cnblogs.com/wilber2013/p/4652531.html

http://foofish.net/blog/109/iterators-vs-generators

https://www.ibm.com/developerworks/cn/linux/sdk/python/charm-20/

  

 

posted on 2016-10-26 19:13  为心莳萝  阅读(101)  评论(0)    收藏  举报

导航