请问这个 Python 迭代器里 next () 定义咋理解

首先理解迭代器。先看看C++怎么实现一个迭代器。在C++中,任何一个数据类型(不论是内置类型还是类)的变量p都可以作为一个迭代器,若同时满足四个性质(“IDEA"):(1)Increment: p可以实现自增,【并且】遍历整个容器,即p++和++p是有意义的并可以实现遍历;(2)Dereference: p可以解析,即*p是有意义的;(3)Equality: p可以和同类型的变量q做相等/不等比较,即p==q和p!=q是有意义的;(4)Assignment: p可以赋值给同类型的变量q,即q=p是有意义的。 (从上面的定义来看,C++的指向数组元素指针显然满足这四条要求,因此指针可以作为数组的迭代器。而有的C++类,只要它有合适的成员方法可以实现上面四个条件,那么也可以作迭代器,比如标准模版库里容器的迭代器。) 现在看看Python。Python的迭代器中,next方法就是实现(1)和(2)的,而(3)(4)是C++为自己提的个性要求,Python不需要管它。具体来看,next的功能是是先解析,再自增。所以调用next后,会返回当前迭代器的解析值,并自增指向下一个容器元素。这也可以在Python源码看出来(3.5.1版本iterobject.c的46-66行): iter_iternext(PyObject *iterator){ // 传入迭代器 ... it = (seqiterobject *)iterator; ... result = PySequence_GetItem(seq, it-\u0026gt;it_index); //获取元素,即解析 if (result != NULL) { it-\u0026gt;it_index++; //将迭代器自增 return result; //返回解析值 } 现在回到题主的问题。 self.a, self.b = self.b, self.a+self.b可以拆成两个语句: self.a = self.b,就是解析,获得斐波那契数列一个项self.b = self.a+self.b,就是迭代器自增,指向下一个容器元素,即指向斐波那契数列下一个项 return self.a,就是返回解析值依个人愚见,应该可以回答题主问题。以上。(抽象地说,迭代器都是一个套路)
■网友
我们来完整的看看迭代过程是怎么实现的:当任何可迭代对象传入到for循环或其他迭代工具中进行遍历时,迭代工具都是先通过iter函数获得与可迭代对象对应的迭代器,然后再对迭代器调用next函数,不断的依次获取元素,并在捕捉到StopIteration异常时确定完成迭代,这就是完整的迭代过程。这也称之为“迭代协议”。
【请问这个 Python 迭代器里 next () 定义咋理解】 还是举例子说明,我们来模拟for循环如何处理内置可迭代对象-----内置类型列表L:
L = I = iter(L)print(next(I))print(next(I))print(next(I))print(next(I))234Traceback (most recent call last): File "E:/12homework/12homework.py", line 6, in \u0026lt;module\u0026gt;print(next(I))StopIteration


推荐阅读