在高级特性二迭代这篇文章中介绍了迭代的特性。现在要介绍的是迭代器(Iterator)。
我们知道生成器可以通过for循环来迭代,而且还可以通过调用 next(generator g) 函数来返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。可以被 next() 函数调用并不断返回下一个值的对象称为迭代器(Iterator)。可以通过isinstance(object obj, Iterator)判断一个对象是否是迭代器:
# 判断一个对象是否是迭代器
isinstance([], Iterator)
isinstance({}, Iterator)
isinstance((x for x in range(10)))
# 结果如下
# False False True
生成器都是Iterator,但是 list,dict 和 str 都是 Iterable 而不是 Iterator。要想 list,dict 和 str 变成 Iterator,可以使用函数 iter(object obj) 。
# 通过 iter(object obj) 方法将一个非 Iterator 对象变为 Iterator 对象
isinstance(iter([]), Iterator)
isinstance(iter('abc'), Iterator)
# 结果如下
# True True