当前位置: 首页 > 后端技术 > Python

小白学Python(二十):迭代器基础

时间:2023-03-25 22:39:33 Python

人生苦短,我选择Python上一篇传送门小白学Python(一):入门小白学Python(二):基本数据类型(上)小白学Python(三):基本数据类型(下)Python新手入门(四):变量的基本操作Python新手入门(五):基本运算符(上)Python新手入门(六):基本运算符(下)小白学Python(7):基本流程控制(上)小白学习Python(8):基本流程控制(下)小白学习Python(9):基本数据结构(列表)(上)小白学习Python(10):基础数据结构(列表)(下)小白学习Python(十一):数据结构基础(元组)小白学习Python(十二):数据结构基础(字典)(上)小白学习Python(十三):数据结构基础(字典))(下)小白学Python(十四):数据结构基础(集)(上)小白学Python(十五):数据结构基础(集)(下)X小白学习Python(16):基本数据类型(函数)(上)小白学习Python(17):基本数据类型(函数)(下)小白学习Python(18):基本文件操作小白学习Python(18):基础files操作小白学Python(十九):异常处理基础迭代器迭代器可以简单理解为for循环,Python为我们提供了for循环之外的另一种访问集合元素的方式。特点:可以记住遍历位置的对象。迭代器从集合的第一个元素开始访问,直到访问完所有元素。迭代器只能前进不能后退。但是判断一个对象是否有迭代器,除了看它是否可以使用for循环外,Python还为我们提供了一个更专业的方法——isinstance()。我们可以使用isinstance()来判断当前对象是否可以迭代。在使用迭代器之前,需要先引入迭代器,因为迭代器并不是Python的内置方法。fromcollections.abcimportIterableprint(isinstance('geekdigging',Iterable))print(isinstance([],Iterable))print(isinstance([],Iterable))print(isinstance({xforxinrange(5)},Iterable))print(isinstance(123,Iterable))打印结果如下:TrueTrueTrueTrueFalse这里有个小注意点,我们在引入Iterable的时候,之前版本的import方法是fromcollectionsimportIterable,但是在Python3中。7抛出异常,如下:D:/Development/Projects/python-learning/base-iter/Demo.py:1:DeprecationWarning:UsingorimportingtheABCsfrom'collections'insteadoffrom'collections.abc'isdeprecated,andin3.8itwillstopworkingfromcollectionsimportIterable表示这个导入方法在Python3.8中将停止使用,现在Python3.8已经发布,我们就按照提示中的方法导入,使用fromcollections.abcimportIterable。在迭代器中,最重要的方法一定是next(),从名字就可以看出,它的作用就是下一个。现在我们尝试迭代一个列表:list1=[1,2,3,4]next(list1)执行结果:Traceback(最近一次调用last):File"D:/Development/Projects/python-learning/base-iter/Demo.py",line12,innext(list1)TypeError:'list'objectisnotaniterator不是说好的list可以迭代吗,怎么又报错了。这位同学,先冷静一下,看看错误信息是怎么说的。这是为了提醒我们列表不是迭代器。所以,可迭代对象不一定是迭代器!我们导入Iterator模块,先把列表转成迭代器,试试看。list1=iter(list1)print(type(list1))Executionresult:从type来看,现在是一个可迭代的list,我们再试试next()方法。print(next(list1))print(next(list1))print(next(list1))print(next(list1))执行结果:1234你看,现在可以正常打印了。我们只是迭代了整个列表中的元素,如果这个时候再迭代呢?print(next(list1))executionresult:Traceback(mostrecentcalllast):File"D:/Development/Projects/python-learning/base-iter/Demo.py",line23,in打印(next(list1))StopIteration已经看到了,会抛出StopIteration的异常。可能看到这里,大家还是觉得迭代器没什么用。让我再举一个例子。如果我们现在有一个set集合,我想一个一个获取set集合中的元素,那么迭代器就派上用场了。因为set集合中没有索引,如果要获取某个值,只能用for循环整个集合,但是有了迭代器,我们就不需要循环整个集合了。set1={1,2,3,4,5}set1=iter(set1)print(next(set1))print(next(set1))print(next(set1))print(next(set1))print(next(set1))结果我就不公布了,大家应该都知道了。另外,迭代器还有一个非常巨大的优势,就是在迭代之前不需要准备好所有的元素。迭代器只有在迭代到一个元素时才开始计算该元素。在此之前或之后,该元素可能不存在或被销毁。这个特性使得它在遍历一些巨大的集合时有很大的优势。今天的内容到此结束。我希望你可以尝试自己迭代其他集合类型,例如元组和字典。感谢您长期以来对我的支持。您的转发和关注是我最大的动力。示例代码本系列所有代码编辑器都会放在代码管理仓库Github和Gitee上,方便大家使用。示例代码-Github示例代码-Gitee如果我的文章对你有帮助,请扫码关注作者的公众号:获取最新干货推送:)