python的迭代器

迭代器对象一定实现了__iter__()、__next__()方法,可迭代对象一定实现了__iter__()方法。

range实现了__iter__方法,但是没有实现__next__()方法,返回的是range对象,列表、元组等序列都是可迭代对象,而不是迭代器对象,仅仅实现了__iter__()方法.

迭代器与可迭代对象的关联:

1.一个实现了 __iter__() 方法的对象,就意味着它一定是可迭代的。

2.迭代器对象实现了 __next__() 方法,从而使得这个对象是迭代器对象

3.可迭代对象的__iter__()方法返回的是一个迭代器实例,所以当iter()内置函数作用于列表等可迭代对象时,底层实现上解释器调用__iter__()方法后返回一个迭代器对象。而迭代器对象的__iter__()方法返回的是一个self,也就是说返回的是对象本身。

1 a = [1, 2, 4]
2 b = iter(a)
3 print(type(b)) # 输出<class 'list_iterator'>
4 print(next(b))  # 输出1
5 print(next(b)) # 输出2

参考:1、https://mp.weixin.qq.com/s/mDh15ML7YyONc62sYSD3tw

      2、https://mp.weixin.qq.com/s/L49EnYQNhrXu0XKBGJmF7w

原文地址:https://www.cnblogs.com/jianglinliu/p/10465837.html