迭代器
迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对
象。迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结
束。迭代器只能往前不会后退。
1. 可迭代对象
以直接作⽤于 for 循环的数据类型有以下⼏种:
⼀类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
⼀类是 generator ,包括⽣成器和带 yield 的generator function。
这些可以直接作⽤于 for 循环的对象统称为可迭代对象: Iterable 。
2. 判断是否可以迭代
可以使⽤ isinstance() 判断⼀个对象是否是 Iterable 对象:
from collections import Iterable print(isinstance([], Iterable))#True print(isinstance({}, Iterable))#True print(isinstance('abc', Iterable))#True print(isinstance((x for x in range(10)), Iterable))#True print(isinstance(100, Iterable))#False
⽽⽣成器不但可以作⽤于 for 循环,还可以被 next() 函数不断调⽤并返回下
⼀个值,直到最后抛出 StopIteration 错误表示⽆法继续返回下⼀个值了。
3.迭代器
可以被next()函数调⽤并不断返回下⼀个值的对象称为迭代器:Iterator。
可以使⽤ isinstance() 判断⼀个对象是否是 Iterator 对象:
from collections import Iterator print(isinstance((x for x in range(10)), Iterator))#True print(isinstance([], Iterator))#False print(isinstance({}, Iterator))#False print(isinstance('abc', Iterator))#False print(isinstance(100, Iterator))#False
4.iter()函数
⽣成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是
Iterator 。
把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使⽤ iter() 函数:
print(isinstance(iter([]), Iterator))#True print(isinstance(iter('abc'), Iterator))#True
总结
凡是可作⽤于 for 循环的对象都是 Iterable 类型;
凡是可作⽤于 next() 函数的对象都是 Iterator 类型
集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可
以通过 iter() 函数获得⼀个 Iterator 对象。