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__() #得到还是迭代器对象
    
  • 可迭代对象:字符串、列表、元组、字典、集合、文件对象(文件对象也是迭代器对象)

原文地址:https://www.cnblogs.com/shi-py-rengongzhineng/p/13983149.html