总结:
一:迭代器和可迭代对象
1:迭代器,凡是定义了__iter__和__next__方法的类都是迭代器;
2:可迭代对象,定义了__iter__或者__getitem__方法的类,叫做可迭代对象。
所以:迭代器一定是可迭代对象,但可迭代对象不一定是迭代器;
二:iter()和next()函数
iter(func)调用函数func的__iter__或者__getitem__函数,当__iter__返回的是迭代器时,则相当于iter()把一个可迭代对象转变为了迭代器,这一点后面细讲;
next(迭代器)调用迭代器的__next__内置函数;
参考自:(2条消息) Python迭代器基本方法iter()及其魔法方法__iter__()原理详解_涛涛ALG的博客-CSDN博客_iter迭代器
首先,先讲一下for循环的原理,for循环会优先进到类的__iter__函数中,然后再循环调用函数的__next__方法。如果类没有定义__iter__函数,则查找类是否有__getiten__函数,如果有__getiten__,则调用默认迭代器,从0开始产生索引,来调用__getitem__方法。
像python中的list,dict等,都是可迭代对象,但不是迭代器,也就是说,list,dict这些函数是有__iter__函数的,但是没有__next__函数,但是他们的__iter__函数的返回值是一个迭代器,也就是说它们的__iter__函数的返回值是一个具有__next__函数的迭代器。



