加入收藏 | 设为首页 | 会员中心 | 我要投稿 汉中站长网 (https://www.0916zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

何为迭代器 Python迭代器及其用法

发布时间:2022-07-06 19:13:26 所属栏目:语言 来源:互联网
导读:前面章节中,已经对列表(list)、元组(tuple)、字典(dict)、集合(set)这些序列式容器做了详细的介绍。值得一提的是,这些序列式容器有一个共同的特性,它们都支持使用 for 循环遍历存储的元素,都是可迭代的,因此它们又有一个别称,即迭代器。 例
  前面章节中,已经对列表(list)、元组(tuple)、字典(dict)、集合(set)这些序列式容器做了详细的介绍。值得一提的是,这些序列式容器有一个共同的特性,它们都支持使用 for 循环遍历存储的元素,都是可迭代的,因此它们又有一个别称,即迭代器。
 
  例如,下面程序自定义了一个简易的列表容器迭代器,支持迭代:
  class listDemo:
      def __init__(self):
          self.__date=[]
          self.__step = 0
      def __next__(self):
          if self.__step <= 0:
              raise StopIteration
          self.__step -= 1
          #返回下一个元素
          return self.__date[self.__step]
      def __iter__(self):
          #实例对象本身就是迭代器对象,因此直接返回 self 即可
          return self
      #添加元素
      def __setitem__(self,key,value):
          self.__date.insert(key,value)
          self.__step += 1
  mylist = listDemo()
  mylist[0]=1
  mylist[1]=2
  for i in mylist:
      print (i)
 
  除此之外,Python 内置的 iter() 函数也会返回一个迭代器,该函数的语法格式如下:
  iter(obj[, sentinel])
 
  Traceback (most recent call last):
    File "C:UsersmengmaDesktopdemo.py", line 7, in <module>
      print(myIter.__next__())
  StopIteration
 
  另外,也可以使用 next() 内置函数来迭代,即 next(myIter),和 __next__() 方法是完全一样的。
 
  从程序的执行结果可以看出,当迭代完存储的所有元素之后,如果继续迭代,则 __next__() 方法会抛出 StopIteration 异常。
 
  这里介绍 iter() 函数第 2 个参数的作用,如果使用该参数,则要求第一个 obj 参数必须传入可调用对象(可以不支持迭代),这样当使用返回的迭代器调用 __next__() 方法时,它会通过执行 obj() 调用 __call__() 方法,如果该方法的返回值和第 2 个参数值相同,则输出 StopInteration 异常;反之,则输出 __call__() 方法的返回值。

(编辑:汉中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!