一。什么是迭代器 迭代器是用来迭代取值的工具。 而涉及到把多个值循环取出来的类型有:列表,字符串,元组,字段,集合,打开文件等。通过使用的遍历方式有forin,while等,但是,这些方式只适用于有索引的数据类型。为了解决索引取的局限性,python提供了一种不依赖于索引的取值方式:迭代器 注意:迭代是通过重复执行的代码处理相似的数据集的过程并且本次迭代的处理数据要依赖上一次的结果继续往下做上一次产生的结果为下一次产生的结果的初始状态如果中途有任何停顿,都不能算是迭代。 二。可迭代对象 可迭代对象:但凡内置有iter方法的都称为可迭代对象 常见的可迭代对象: 1。集合数据类型,如list,tuple,dict,set,str等 2。生成器,包括生成器和带yield的生成器函数。 三。如何创建迭代器iter()该方法返回一个迭代器,此处可以返回自己next()该方法返回下一个迭代器对象classMyNums:defiter(self):self。num1returnselfdefnext(self):self。num1returnself。nummynumsMyNums()myiteriter(mynums)通过可迭代对象mynums来生成迭代器print(next(myiter))print(next(myiter))print(next(myiter))print(next(myiter)) 迭代器是一个包含数个值的对象。 迭代器是可以迭代的对象,这意味着您可以遍历所有值。 从技术上讲,在Python中,迭代器是实现迭代器协议的对象,该协议由方法iter()和next()组成。 简而言之,一个类里面实现了iter()和next()这两个魔法方法,那么这个类的对象就是可迭代对象。 四。迭代器的优缺点 1。优点节约内存不依赖索引取值实现惰性计算 2。缺点无法获取长度(只有在next完毕才知道到底有几个值)一次性的,只能往后走,不能往前退 五。迭代器示例classStu:definit(self):self。students〔〕defiter(self):returnselfdefadd(self):nameinput(请输入姓名:)telinput(请输入电话:)addrinput(请输入地址:)newstudict()newstu〔name〕namenewstu〔tel〕telnewstu〔addr〕addrself。students。append(newstu)defnext(self):returnself。studentssStu()创建可迭代的对象s。add()s。add()s。add()ssiter(s)由可迭代对象生成迭代器print(next(ss)) 另外,如果类Stu继承了Iterator,那么Stu可以不用实现iter()方法fromcollections。abcimportIterable,IteratorclassStu(Iterator):definit(self):self。students〔〕defiter(self):returnselfdefadd(self):nameinput(请输入姓名:)telinput(请输入电话:)addrinput(请输入地址:)newstudict()newstu〔name〕namenewstu〔tel〕telnewstu〔addr〕addrself。students。append(newstu)defnext(self):returnself。students创建对象sStu()Iterable可以判断一个对象是否是可迭代的对象print(isinstance(s,Iterable))s。add()s。add()s。add()ssiter(s)print(next(ss)) 遍历迭代器 StopIteration 如果你有足够的next()语句,或者在for循环中使用,则上面的例子将永远进行下去。 为了防止迭代永远进行,我们可以使用StopIteration语句。 在next()方法中,如果迭代完成指定的次数,我们可以添加一个终止条件来引发错误classMyNums:definit(self):self。num1defiter(self):returnselfdefnext(self):ifself。num10:self。num1returnself。numelse:raiseStopIteration防止无穷迭代mynumMyNums()myiteriter(mynum)foriinmyiter:print(i)