|python中的迭代器是个啥?


|python中的迭代器是个啥?

文章图片


|python中的迭代器是个啥?

文章图片


迭代器是什么?
说道python的迭代器之前 , 不得不提到的就是在远古时期的C语言的时代 , 如果想要对一个数组进行遍历 , 只能使用for循环 。
但是这样通常会有很多问题 , 首先就是对不同容器类型遍历的写法不一致 , 另外就是循环条件偶尔写错了报错 , 还得找半天bug , 要知道我们只是想简简单单的遍历一个列表啊 , 有这么痛苦吗?
接着我们的主角迭代器就登场了!
就以python举例 , 不管是字典形式 , 列表形式 , 元组形式都可以使用for语句一个搞定 。

为什么要使用迭代器
那么迭代器帮助我们解决的问题也就显而易见了 , 我们面对可迭代对象再也不用记那么多不同的写法了 , 只需要一个就可以了 , 极大程度的让我们更加专注于写bug(不是)
怎么构建一个迭代器
相信 看完上面就已经知道 , 迭代器相当于系统把不同的可迭代对象都帮你做成了一个统一的接口 , 那么可迭代对象背后到底是什么呢?

迭代当然不需要列表老大亲自来执行了 , 而是派出自己的小弟来执行 , 那么这个小弟是谁呢?
【|python中的迭代器是个啥?】首先可以使用dir查看一下我们可迭代对象拥有的方法和属性 。

就是其中的__iter__方法 , 简单来说如果有这个方法 , 那么他就是可迭代的对象 。
那么此时此刻一个可迭代的对象进入for语句之后会做什么呢?会将__iter__放法的返回当做一个对象 , 再调用其中的__next__方法 , 也就是真正的迭代器 , 可以通过iter方法获得列表的小弟__iter__方法 , 从而直接调用__next__方法 。

从本质上来说如果一个对象 , 有__iter__和__next__方法那么这一定就是一个可迭代的对象 。
下面我就构建了一个可以反向输出的可迭代对象 。