先上图
三者的关系如图所示,接下来再用文字对其进行说明。(按 本人理解 来写的)
可迭代对象:
具有__iter__()方法的对象,就是可迭代对象,常见的有列表、字典、集合。
可迭代对象在实现了__iter__()方法后,就会生成迭代器。
迭代器:
具有__iter__()、next()方法,用__next__()方法来进行取值。主要特点为惰性求值(lazily produce),迭代器只保存基本的数据和生成数据的方法,调用__next__()时,才会具体计算并返回数据。这样的好处是在处理大数据时,不会占用电脑大量的空间资源,降低大数据处理的硬件要求。
手写迭代器:
class feibo(object):
a = 0
b = 1
def __next__(self):
self.a,self.b = self.b,self.a+self.b
return self.a
def __iter__(self):
return self
生成器:
是一个特殊的迭代器。一般通过生成器表示和生成器函数(关键字为yield)产生。
tips:
python3中,range方法生成的是一个range对象(range object)具有迭代器的特性,但不是迭代器。