python之迭代器
什么是迭代器?
迭代器就是迭代取值的工具,迭代是一个重复取值的过程,每次重复都基于上一次的结果而继续的。
为什么要有迭代器?
为了解决基于索引取值的局限性。而提供的统一取值的方法
什么是可迭代对象?
但凡内置有_ _ iter _ _方法都称之为可迭代对象。
字符串、列表、元组、字典、集合、文件对象
可迭代对象转迭代器对象
调用可迭代对象下的_ _ iter _ _方法会将可迭代对象转化为迭代器对象。
使用迭代器对象下的_ next _方法,可以迭代器对象进行依次取值,当指取完后将弹出StopIteration报错。
for的工作原理
d={'k1':'v1','k2':'v2'}
for i in d:
pass
1.d.__iter__()得到迭代器对象
2.迭代器对象.__next__()拿到一个返回值,然后将值返回赋值给i
3.循环步骤2,直到抛出StopIteration异常for循环会捕捉异常然后结束循环
迭代器的优点与缺点
- 优点
- 为序列类型和非序列类型提供了一种统一的迭代取值的方式
- 惰性计算
- 缺点
- 除非取尽,否则无法获取迭代器的长度
- 只能取下一个值,不能回到开始(一次性取值)迭代器产生后的唯一目标就是重复执行next方法直到值取尽,否则就会停留在某个位置,等待下一次调用next;若是要再次迭代同个对象,你只能重新调用iter方法去创建一个新的迭代器对象,如果有两个或者多个循环使用同一个迭代器,必然只会有一个循环能取到值。
总结
- 可迭代对象(可以转化为迭代器的对象):内置有_ iter _方法的对象。
可迭代对象.__iter__() #得到迭代器对象
-
迭代器对象:内置有_ iter _ 方法,并且内置有_ next _方法的对象
迭代器对象.__next__() #得到迭代器的下一个值 迭代器对象.__iter__() #得到还是迭代器对象
-
可迭代对象:字符串、列表、元组、字典、集合、文件对象(文件对象也是迭代器对象)