Python的迭代器和生成器

这里简单的澄清一下Python中下面几个概念:

  • 容器
  • 可迭代对象
  • 迭代器
  • 生成器      

1.烦人的概念


 

 容器这个概念不妨就按照字面意思来理解,指能将一些元素组织在一起的一种数据结构,你可以通过 in 或者 not in 这样的关键字判断某个指定的元素是否包含在容器中。通常来说,容器会将所有的元素都存放到内存中,但也有例外,比如迭代器和生成器。在Python中,常见的容器对象有:list,set, tuple, str等。对于可迭代对象,标准的定义是这样的:它是Python中的任意一种对象,只要它定义了可以返回一个迭代器的 __iter__ 方法。简言之,可迭代对象就是能够提供迭代器的任意对象。那么什么是迭代器呢?仿照可迭代对象的定义,迭代器是指:带有状态的某种对象,在Python3中,任何实现了 __iter__ 方法和 __next__ 方法的对象都是迭代器,其中,当你调用__iter__ 方法时会返回迭代器自身,而调用 __next__ 方法时返回容器中的下一个值(若容器中没有更多的元素了,则抛出 StopIteration 的异常)。生成器是一种特殊的迭代器,用关键字 yield 标识。生成器一定是迭代器。


2.几个例子


s是一个可迭代对象(字符串),而it则变成了迭代器;

通过调用迭代器it的next方法,逐个提取其中的元素,直至耗尽该迭代器;


这里的reserve函数即为一个生成器,用过yield关键字代替了return;

生成器和迭代器都是工厂模式,只有在需要数据的时候才会产生数据,需要几个产生几个,优点是节省内存;


此处gen是一个生成器表达式,生成器表达式用一对圆括号表示;


 

posted @ 2017-08-27 22:26  Ping的博客  阅读(196)  评论(0编辑  收藏  举报