zoukankan      html  css  js  c++  java
  • Python知识巩固(迭代器)

    迭代器

    1. from collections import Iterable
      isinstance(a,Iterable) 可以用来判断是否是可以迭代的对象
      iter() 放可以迭代的对象,它的返回值是一个迭代器
      from collections import Iterator
      isinstance(a,Iterator) 可以用来判断是否是迭代器
      next() 放迭代器


    2. 结合程序
      from collections.abc import Iterable,Iterator
      
      class Classmate(object):
          def __init__(self):
              self.names = list()
          def add(self,name):
              self.names.append(name)
          def __iter__(self):
              """如果想要一个对象称之为一个 可以迭代的对象,
                  既可以适用for,那必须实现__iter__方法
              """
              return ClassIterator(self)  # 返回一个具有__iter__,__next__方法的对象的引用
                                          # 因为ClassIterator需要列表names
                                          # 就把自己这个对象传给ClassIterator
      class ClassIterator(object):
          def __init__(self,obj):
              self.obj = obj
              self.num = 0
          def __iter__(self):
              pass
          def __next__(self):
              if self.num < len(self.obj.names):
                  r = self.obj.names[self.num]
                  self.num += 1
                  return r
              else:
                  raise StopIteration
      
      classmate = Classmate()
      classmate.add("老王")
      classmate.add("老张")
      classmate.add("老李")
      
      """
      print("判断classmate是否是可以迭代的对象:",isinstance(clasasmate,Iterable))
      classmate_iterator = iter(Classmate) #会自动调用Classmate的__iter__方法,
                                      # classmate_iterator就变成了ClassIterator对象
      print("判断classmate_iterator是否是迭代器:",isinstance(clasasmate_iterator,Iterable))
      print(next(classmate_iterator))   #会自动调用ClassIterator的__next__方法
      """
      
      for i in classmate:
          print(i)
      

       

    3. 既然如此,就可以把自己当成ClassIterator,最后应该变成这样
      from collections.abc import Iterable,Iterator
      
      class Classmate(object):
          
          def __init__(self):
              self.names = list()
              self.num = 0
          def add(self,name):
              self.names.append(name)
          def __iter__(self):
              return self 
          def __next__(self):
              if self.num < len(self.names):
                  r = self.names[self.num]
                  self.num += 1
                  return r
              else:
                  raise StopIteration
              
      
      classmate = Classmate()
      classmate.add("老王")
      classmate.add("老张")
      classmate.add("老李")
      
      for i in classmate:
          print(i)
      

        

    4. 迭代器的应用————斐波那契数列

     

  • 相关阅读:
    关于程序中以时间判断接收数据结束时,接收数据长度设置为1时,出现接收不全的问题解释。
    stm32 外部8M晶振 改为12M的方法
    django iis 部署
    电信NB卡
    socketserver
    APScheduler简介
    三极管开关电路
    mysql授权
    解决VMware无法共享ubuntu虚拟机文件
    Python解析yaml配置文件
  • 原文地址:https://www.cnblogs.com/otome/p/12384492.html
Copyright © 2011-2022 走看看