迭代器
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
我们已知道,可以直接作用于 for 循环的数据类型有以下几种:
一类是集合数据类型,如:list、tuple、dict、set、str等
一类是generator ,包括生成器和 yield 的generator function。
这些可以直接作用于for 循环的对象统称为可迭代对象:Iterable
可以使用isinstance() 判断一个对象是否是 Iterable 对象:
小结
凡是可作用于 fo r 循环的对象都是 Iterable 类型;
凡是可作用于 next() 函数的对象都是 Iterator 类型,它们表示一个惰性计算的序列;
集合数据类型如 list、dict、str等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个 Iterator 对象。
Python3的 for 循环本质上就是通过不断调用 next() 函数实现的,例如:
fo x in [1,2,3,4,5]:
pass
实际上完全等价于:
#首先获得Iterator 对象:
it = iter([1,2,3,4,5])
#循环:
whil True:
try:
获得下一个值:
x= next(it)
except StopIteration
#遇到StopIteration 就退出循环
break