首先我们要理解迭代器(iterators)。根据维基百科,迭代器是一个让程序员可以遍历一个容器(特别是列表)的对象。然而,一个迭代器在遍历并读取一个容器的数据元素时,并不会执行一个迭代。你可能有点晕了,那我们来个慢动作。换句话说这里有三个部分:
- 可迭代对象(Iterable)
- 迭代器(Iterator)
- 迭代(Iteration)
上面这些部分互相联系。我们会先各个击破来讨论他们,然后再讨论生成器(generators).
可迭代对象(Iterable)
Python中任意的对象,只要它定义了可以返回一个迭代器的__iter__
方法,或者定义了可以支持下标索引的__getitem__
方法(这些双下划线方法会在其他章节中全面解释),那么它就是一个可迭代对象。简单说,可迭代对象就是能提供迭代器的任意对象。那迭代器又是什么呢?
迭代器(Iterator)
任意对象,只要定义了next
(Python2) 或者__next__
方法,它就是一个迭代器。就这么简单。现在我们来理解迭代(iteration)
迭代(Iteration)
用简单的话讲,它就是从某个地方(比如一个列表)取出一个元素的过程。当我们使用一个循环来遍历某个东西时,这个过程本身就叫迭代。现在既然我们有了这些术语的基本理解,那我们开始理解生成器吧。