Python中的iterator 和 iterable

首先,可以从字面意思上看出,iterator是名词--迭代器,iterable是形容词--可迭代的(XXX)。这样是不是就好理解了。

接下来,具体研究,到底怎么用。

对于一个数据类型,可以使用Iterator判断是不是迭代器,使用Iterable判断是不是可迭代的。

from collections.abc import Iterator, Iterable

# isinstance(XXX, Iterable)判断XXX是否可迭代
print(isinstance([1, 2, 3], Iterable))
print(isinstance((1, 2, 3), Iterable))
print(isinstance(123, Iterable))

# isinstance(XXX, Iterator)判断XXX是否为迭代器
print(isinstance([1, 2, 3], Iterator))
print(isinstance((), Iterator))
print(isinstance((x for x in range(10)), Iterator))

结果为:

Python中的iterator 和 iterable

list、truple、str、dic等是可迭代,但他们并不是迭代器。而不确定要循环迭代多少次,每调用一次next()都可以进行下一步,具有惰性的,这样理解为迭代器。

集合数据类型如list,truple,dict等属于Iterable不是Iterator,但他们都可以通过iter()函数获得一个Iterator对象。

上一篇:JS 的基本语法


下一篇:Collection和Collections的区别