公司多个门户是做二级域名还是做多个网站,开发wordpress插件如何防破解,地产网站互动营销,网站怎么做框架集Python中#xff0c;使用for循环可以迭代容器对象中的元素#xff0c;这里容器对象包括是列表(list)、元组(tuple)、字典(dict)、集合(set)等。但是#xff0c;为什么这些对象可以使用for循环进行操作呢#xff1f;首先#xff0c;定义一个简单的类尝试一下#xff1a;cl…Python中使用for循环可以迭代容器对象中的元素这里容器对象包括是列表(list)、元组(tuple)、字典(dict)、集合(set)等。但是为什么这些对象可以使用for循环进行操作呢首先定义一个简单的类尝试一下class TestRange:def __init__(self, num):self.num numfor i in TestRange(10):print(i)# 输出Traceback (most recent call last):File , line 1, in TypeError: TestRange object is not iterable错误信息提示TestRange object 不是可迭代的对象。那么什么才是可迭代的对象呢在可迭代的对象中需要实现一个__iter__魔法方法而且这个方法的返回值需要是一个迭代器。那么什么是迭代器呢迭代器只需要实现__next__魔法方法。以列表(list)为例 nums [13,12,33] iter_ret nums.__iter__() # x有此方法说明list是可迭代的而且该方法返回一个迭代器 iter_ret iter_ret.__next__()13 iter_ret.__next__()12 iter_ret.__next__()33 iter_ret.__next__()Traceback (most recent call last):File , line 1, in StopIteration分析如上所示列表nums中实现了__iter__方法而且返回一个迭代器(iterator)迭代器中实现了__next__方法。在不断调用__next__的过程中就是在不断返回nums中的元素直到出现StopIteration的错误。其实for语句的作用与此类似。for语句的内部机制为先判断对象是否为可迭代对象即是否存在__iter__方法如果存在则调用__iter__方法返回一个迭代器否则直接抛出TypeError异常不断地调用迭代器的__next__方法每次调用按顺序迭代获取当前的值迭代完所有元素就抛出异常 StopIteration这个异常 python 解释器自己会处理前面的 TestRange 报错是因为它没有实现迭代器协议里面的这两个方法现在继续改进class TestRange:def __init__(self, _max):self.i 0self._max _maxdef __iter__(self):return selfdef __next__(self):if self.i self._max:i self.iself.i 1return ielse:# 达到停止条件时抛出此异常raise StopIteration()# 进行测试for i in TestRange(3):print(i)# 输出012分析因为这个类中已经实现了__next__方法所以基于这个类所创建的对象本身就是一个迭代器。又因为可迭代对象需要有__iter__方法而且返回一个迭代器所以__iter__返回对象本身self即可。总结到此这篇关于Python-for循环的内部机制的文章就介绍到这了,更多相关python for 循环内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客