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

Python函数advanced-iterator

时间:2023-03-26 19:24:37 Python

iterator什么是迭代器?一个可以被下一个指针调用并不断返回下一个值的对象称为迭代器。表示为Iterator,一个迭代器是一个对象类型的数据。概念迭代器是指用于迭代值的工具。迭代是一个重复的过程。每次重复都基于先前的结果继续。简单的重复不是迭代。特征迭代器不依赖索引,而是通过next指针迭代所有数据,并且一次只取一个值,大大节省了空间。惰性序列惰性序列是指一次不把所有的数据放到序列中,而是一个一个地遍历这样的序列。范围对象和迭代器可以生成惰性序列。检查可迭代对象for循环用于遍历可迭代对象。简单的说,for循环可以遍历的元素都是可迭代对象。for循环之所以能够遍历所有可迭代的数据,是因为底层调用了迭代器,在next方法中通过指针实现了数据的获取。所以普通的非迭代器可迭代对象和迭代器的区别就是一个不能被next直接调用,一个可以被next指针调用。再重复一次,可迭代对象不一定是迭代器,迭代器必须是可迭代对象。使用dir()函数查看数据中的所有对象成员。如果它包含__iter__方法,则表示它是一个可迭代对象。也就是说,__iter__方法的作用是返回一个可迭代对象。#定义一个列表,列表是一个可迭代对象lst=[1,2,3,4,5]#获取列表的所有成员res_lst=dir(lst)print(res_lst)'''['__add__','__class__','__contains__','__delattr__','__delitem__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__gt__','__hash__','__iadd__','__imul__','__init__','__init_subclass__','__iter__','__le__','__len__','__lt__','__mul__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__reversed__','__rmul__','__setattr__','__setitem__','__sizeof__','__str__','__subclasshook__','append','clear','copy','count','extend','index','insert','pop','remove','reverse','sort']'''#检查res_lstprint(res)中是否有__iter__方法res='__iter__'#True#有一个__iter__方法,说明确实是一个可迭代的对象定义iterator迭代器的表示是iterator。使用iter函数将普通的可迭代对象转换为迭代器。使用\__iter__方法使用__iter__内置方法将可迭代对象转换为迭代器。lst=[1,2,3]print(type(lst))#it=lst.__iter__()print(type(it))#生成器参见生成设备详细信息。确定迭代器检查内置方法是否存在__iter__方法规范是一个可迭代对象。__next__方法的存在表明它是一个迭代器,因为迭代器可以使用__next__指针来获取元素。在迭代器中,__iter__和__next__都存在。生产卡是可迭代的对象。#listlst=list()#迭代器lst_it=iter(lst)#迭代器中的所有成员res_lst=dir(lst_it)#判断res_lst中是否有'__iter__':print('lst_itisaniterableobject')if'__next__'inres_lst:print('lst_itisaniterator')'''result:lst_itisaniterableobjectlst_itisaniterator'''使用collections模块导入Iterator,在collections模块中通过Iterable类型判断是否是可迭代对象或迭代器。迭代器是迭代器类型的数据。Iterable是可迭代的对象类型数据。可以通过isinstance函数使用导入的数据类型来判断数据的类型。lst=list()lst_it=iter(lst)#判断是否为迭代器res=isinstance(lst_it,Iterator)print(res)#True#判断是否为可迭代对象res=isinstance(lst_it,Iterable)print(res)#True调用迭代器调用迭代器的几种方法使用next函数或者__next__内置方法,一个一个的获取数据,一遍又一遍;使用for循环遍历它;使用while循环配合next函数或__next__内置方法;强制为其他数据类型;使用next方法和函数调用iterator使用next函数取出内容,next是调用iterator中的数据,是单向不可逆的,是一个一路向黑的过程。如果调用超过迭代器中的元素个数,会报错StopIteration,即停止迭代。#因为lst没有数据,无法取回数据lst=list()lst_it=iter(lst)res=next(lst_it)#StopIterationprint(res)取回迭代器中的数据,如果取回所有数据,则迭代器必须重置再拿出来。lst=[1,2,3]lst_it=iter(lst)#一次只会从迭代器中取出一条数据print(next(lst_it))#1print(next(lst_it))#2print(next(lst_it))#3#如果迭代器中的元素个数超过,会报错print(next(lst_it))#StopIteration#如果要取回数据,重置迭代器,在一个上重新定义迭代器side是重置迭代器lst_it=iter(lst)#再次取出数据,使用__next__方法print(lst_it.__iter__())#1print(lst_it.__iter__())#2print(lst_it.__iter__())#3总结使用下一个函数调用,使用for循环遍历成为其他数据类型(被测容器可以转为迭代器,但是转为列表迭代器只有内容)。关注Python技术大本营,获取更多技能和教程。