迭代器、生成器、容器

1.容器:

容器是一种把多个元素组织在一起的数据结构。

容器比较容易理解,因为你就可以把它看作是一个盒子、一栋房子、一个柜子,里面可以塞任何东西。

从技术角度来说,当它可以用来询问某个元素是否包含在其中时,那么这个对象就可以认为是一个容器,比如 list,set,tuples都是容器对象

尽管绝大多数容器都提供了某种方式来获取其中的每一个元素,但这并不是容器本身提供的能力,而是可迭代对象赋予了容器这种能力,当然并不是所有的容器都是可迭代的,比如:Bloom filter。


2.可迭代对象(iterable):

可迭代对象和容器一样是一种通俗的叫法,并不是指某种具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。



3.迭代器(iterator):

那么什么是迭代器呢?

它是一个带状态的对象,他能在你调用 next()方法的时候返回容器中的下一个值,任何实现了 __next__()(python2中实现 next())方法的对象都是迭代器。

迭代器就像一个懒加载的工厂,等到有人需要的时候才给它生成值返回,没调用的时候就处于休眠状态等待下一次调用。


4. 生成器(generator):

生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要写 __iter__()和 __next__()方法了,只需要一个 yiled关键字。

生成器一定是迭代器(反之不成立)。


5.生成器表达式(generator expression):

生成器表达式是列表推倒式的生成器版本,看起来像列表推导式,但是它返回的是一个生成器对象而不是列表对象。


6.关系汇总:



(以上均摘自Python之禅)

你可能感兴趣的:(迭代器、生成器、容器)