迭代器对象一定实现了__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