信息技术:127什么是迭代器,Python迭代器及其用法.docxVIP

  • 1
  • 0
  • 约2.34千字
  • 约 4页
  • 2022-08-04 发布于四川
  • 举报

信息技术:127什么是迭代器,Python迭代器及其用法.docx

什么是迭代器,Python迭代器及其用法 前面章节中,已经对列表(list)、元组(tuple )、字典(diet)、集合(set)这些序列式 容器做了详细的介绍。值得一提的是,这些序列式容器有一个共同的特性,它们都支持使用 for循环遍历存储的元素,都是可迭代的,因此它们又有一个别称,即迭代器。 从字面来理解,迭代器指的就是支持迭代的容器,更确切的说,是支持迭代的容器类对象, 这里的容器可以是列表、元组等这些Python提供的基础容器,也可以是自定义的容器类对 象,只要该容器支持迭代即可。 ?Python实现自定义序列》一节中,已经学会了如何自定义一个序列类,但该序列类对象 并不支持迭代,因此还不能称之为迭代器。如果要自定义实现一个迭代器,那么类中必须实现 如下2个方法: _next_(self):返回容器的下一个元素。 _iter_(self):该方法返回一^迭代器(iterator)。 例如,下面程序自定义了一个简易的列表容器迭代器,支持迭代: class listDemo: def_init_(self): self._date=[]self._step = 0 def_next_(self): 7.if self._step = 0: 7. raise Stopiterationself._step -= 1 #返回下一个元素return self._date[self._step] def_iter_(self): #实例对象本身就是迭代器对象,因此直接返回self即可return self #添加元素def_setitem_(self key,value): self._date.insertfkey,value)self._step += 1 mylist = listDemof)mylist[0]=l mylist[l]=2for i in mylist: print (i) 程序执行结果为: 除此之外,Python内置的iter()函数也会返回一个迭代器,该函数的语法格式如下: iter(obj[, sentinel]) 其中,。切必须是一个可迭代的容器对象,而sentinel作为可选参数,如果使用此参数, 要求。切必须是一个可调用对象,具体功能后面会讲。 可调用对象,指的是该类的实例对象可以像函数月瞬,直接以对象名()” 的形式被使用。通过在类中添加_call_0方法,就可以将该类的实例对象 编程可调用对象。有关_call_()方法,可阅读?Python _call_()>做详细了解。 我们常用的是仅有1个参数的iter()函数,通过传入一个可迭代的容器对象,我们可以获 得一个迭代器,通过调用该迭代器中的_next_()方法即可实现迭代。例如; 1. #将列表转换为迭代器 2. mylter = iter([l, 2, 3]) 3. #依次获取迭代器的下一个元素 4. print(mylter._next_()) 5. print(mylter._next_()) 6. print(mylter._next_()) 7. print(mylter._next_()) 运行结果为: Traceback (most recent call last): File C:\Users\mengma\Desktop\demo.py\ line 7, in module print(mylter._next_()) Stopiteration另外,也可以使用next()内置函数来迭代,即next(mylter)和__next__() 方法是完全一样的。 从程序的执行结果可以看出,当迭代完存储的所有元素之后,如果继续迭代,那么_next_() 方法会抛出Stopiteration异常。 这里介绍iter()函数第2个参数的作用,如果使用该参数,那么要求第一个obj参数必须 传入可调用对象(可以不支持迭代),这样当使用返回的迭代器调用_next_()方法时, 它会通过执行。切()调用方法,如果该方法的返回值和第2个参数值相同,那么 输出Stoplnteration异常;反之,那么输出方法的返回值。 例如,修改listDemo类如下所示: 纯文本复制class listDemo: def_init_(self): self._date=[]self._step = 0 def_setitem_(selfkey,value): self._date.insert(key, value)self._step += 1 #是该类实例对象成为可调用对象def_call_(self): self._step-=lreturn self._date[self._step] mylist = listDemof) mylist[0]=l

文档评论(0)

1亿VIP精品文档

相关文档