Iterable是可迭代对象,Iterator是迭代器。
如果一个数据类型可以直接用for循环遍历,那么它是Iterable
如果一个数据类型可以调用next()函数遍历,那么它是Iterator。Iterator相当于一个惰性的数据流,每次调用next()时才计算下一个值。这种按需计算并生成元素的方法能够减少内存的占用。
由此可见dict类型是Iterable,不是Iterator。list、str也不是Iterator。
对于非Iterator的数据类型,可以使用iter()函数将其转换为Iterator
查看一个数据类型是不是Iterable或Iterator,可以:
from collections.abc import Iterator, Iterable
print(isinstance(#datatype, Iterator))
print(isinstance(#datatype, Iterable))
应用:可以利用Iterator构造全体素数、全体自然数这种集合,因为是惰性构造,不会占用很大内存。