网上有很多迭代器与生成器的介绍,此处不啰嗦,简单概括一下。
迭代器即实现了 _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 存在的基础上。
再看生成器,是不是可以理解成生成器是我们不需要系统去构建这个工厂,而是自己自定义一个工厂,它的原料可以自定义为外部供给,也可以设置为内部产生。