迭代器

可迭代对象:Iterable

<aside> ⚠️ 凡是可作用域 for 循环的对象都是 Iterable 类型

凡是可作用于next() 函数的对象都是Iterator 类型,它们表示一个惰性计算的序列;

</aside>

迭代器:Iterator

isinstance() 判断对象类型:

>>> from collections.abc import Iterable
>>> isinstance([], Iterable)
True
>>> isinstance({}, Iterable)
True
>>> isinstance('abc', Iterable)
True
>>> isinstance((x for x in range(10)), Iterable)
True
>>> isinstance(100, Iterable)
False

可迭代对象转换为迭代器对象

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

可迭代对象和迭代器对象的区别

迭代器对象表示的是一个数据流,可以被 next() 函数调用并不断返回下一个数据,直到没有数据时抛出错误,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过 next() 函数实现按需计算下一个数据,所以 Iterator 的计算是惰性的,只有在需要返回下一个数据时它才会计算。

Iterator 甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。