请问这个 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
推荐阅读
- 如果你的多肉出现这个长势,要注意这个细节,多肉才会越来越美!
- 『活动』让孩子们欢欢喜喜过新年 这个元旦好有爱!南京聋校举办多种形式庆祝活动
- 免费“单人套餐”背后的故事:爱心让这个冬天不再寒冷
- 夫子庙■“秦淮灯会”“夫子庙小吃”等非遗重点保护 护航夫子庙,这个法明年施行
- 气温■@江苏人,这个周末天气晴!温度缓慢回升,早晚依旧“冻”人
- 黄金时间■黄金时间丨哪种产品最节水?购买产品请注意这个标识!
- 『黄金时间』请认准这个蓝色的标志! 黄金时间丨同行业中用水最少的企业
- 汽车|评测 | 懂你所想,予你所需!依维柯欧胜2021款这个“搭档”可还行?
- 银行高管的薪酬结构图表最新的,请问在哪里可以收集
- 电动车|这个月,原来小编们这么拼
