1 什么是迭代器
迭代器是一种迭代取值的工具
迭代是一种重复的过程,每次重复都是基于上一次的结果而来
2 为什么要使用迭代器
迭代器是一种不依赖索引取值的工具
1 可迭代对象,但凡内置有__iter__方法的对象都是可迭代对象
2 可迭代对象有:str list dict tuple 文件对象
执行可迭代器对象下的__iter__方法,返回值得到的对象就是迭代器对象
迭代器对象:
既内置有__iter__方法的,执行__iter__方法得到的就是迭代器对象本身
又内置有__next__方法的,执行__next__方法可以不依赖索引取值
注意:
1 迭代器对象本身就是可迭代对象,可迭代对象不一定是迭代器对象
2 文件对象本身就是一个迭代器对象
3 同一个迭代器对象只能完整的取完一次值
for 循环的本质就是一个迭代器
for 循环的工作原理:
1 调用in后面的__iter__的方法将in后面的值变成迭代器
2 再调用生成迭代器对象的__next__方法,循环取值,将值赋给in前面的i
3 再循环结束时,迭代器会抛出异常,for循环会自动的处理异常,使循环结束
注意:
从for循环的角度,但凡可以被for循环循环取值的对象都是可迭代对象
3 迭代器对象总结
优点:
1 迭代器对象提供了一种可以不依赖索引取值的方式
2 每次循环都只取一个值,这使得内存中只有一个值,不占用内存空间
缺点:
1 不能取到指定的值
2 无法估计迭代器对象的长度