网上有很多迭代器与生成器的介绍,此处不啰嗦,简单概括一下。

迭代器即实现了 __iter__ 与 next()

迭代器可以通过iter(可迭代对象)创建

迭代器本质是在不停地产生新的对象以此节约内存

生成器是一个包含yield关键字的函数调用后的对象(是一种迭代器)

思考:既然迭代器是不停地生产一个对象,那iter()产生的到底是一个什么东西呢?

猜想:它产生的是一个方法,不停地得到下一个对象,它的依据是 iter 的参数对象

代码:

a = [1, 2, 3]
b = iter(a)
for i in b:
    print(i)
>>> 1
>>> 2
>>> 3

del a
for i in b:
    print(i)
>>>

删除了 a,再遍历迭代器b时,根本得不到1,2,3了。

因为b这个类似工厂的东西,失去了原料。

它的方法需要建立在 a 存在的基础上。

再看生成器,是不是可以理解成生成器是我们不需要系统去构建这个工厂,而是自己自定义一个工厂,

它的原料可以自定义为外部供给,也可以设置为内部产生。