迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始 访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
我们已经知道,可以直接作用于 for 循环的数据类型有以下几种:
一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
一类是 generator ,包括生成器和带 yield 的generator function。
这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。
那我们怎么判断一组数据或是一组数据对象是不是 Iterable 对象尼?
可以使⽤ isinstance() 判断⼀个对象是否是 Iterable 对象
可以被next()函数调⽤并不断返回下⼀个值的对象称为迭代器:Iterator
⽣成器不但可以作⽤于 for 循环,还可以被 next() 函数不断调⽤并返回下⼀个值,直到最后抛出 StopIteration 错 误表示⽆法继续返回下⼀个值了。
list 、 dict 、 str 不是 Iterator ,因为Python的 Iterator 对象表示的是一个数据流,Iterator对象可以 被 next() 函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration 错误。可以把这个数据流看做 是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过 next() 函数实现按需计算下一个数据,所 以 Iterator 的计算是惰性的,只有在需要返回下一个数据时它才会计算。
注意 Iterator 对