山野村夫-陈墨 发表于 2019-10-24 23:06

python利器--迭代器

关于这次帖子,如果有错误的地方,还请各位指正,不胜感激。初次接触迭代器,故仅作为一篇笔记而发表。
'''
    迭代器: 一种访问数据的方式。
      迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.
      两个方法:
            (1)__iter__(). 含有这个方法的对象可以迭代,只有这个方法的对象不能称为迭代器。
               它返回一个类(比如A),然后A类调用__next__()方法返回想要获取的值。
         (2)__next__(). 这个方法用于返回A类实例的某个属性值。有__iter__()和__next__()的类才能称为迭代器。

      注意:我的教材上计数器self.cur是公有方法,而且最后计数器没有置零。但是这样,我觉得有问题:
            (1)只能访问一次;
            (2)self.cur被修改后可能遗漏访问,或者重复访问
      所以我修改了两个地方
            (1)计数器self.cur设置为 self.__cur私有属性,禁止被对象直接操作;
            (2)迭代结束,计数器清零。


      简单的模型:
      classA(){
             init():
                self.date
             iter():
                return A
             next():
               return self.date
      }

      main():
            a= A()
            foritem in a:
                pass1
      "for itemin a " 这句话执行应该是这样的:
             (1) a.__iter__(),返回类A
             (2)类A调用__next__(),返回a对象的某些属性值给item
             (3) pass1执行。
                  (1)(2)(3)循环,直到访问结束

'''


classiter():

    def __init__(self):
      #类的属性,用于保存对象数据
      self.name= list()
      self.id= list()
      #在迭代器中使用的计数器,
      # 建议:设置为私有属性
      self.__cur = 0

    def add(self, name,id):
      self.name.append(name)
      self.id.append(id)

    #__iter__()方法,迭代时对象调用它,它调用类
    def __iter__(self):
      return self

    #__next__()方法,类调用它
    def __next__(self):
      #有可访问的数据
      if self.__cur<len(self.name):
            ans= self.name,self.id
            #计数器加一
            self.__cur += 1
            return ans
      #数据访问结束
      else:
            #计数器清零,不然下次没有办法迭代
            self.__cur = 0
            raiseStopIteration


defmain():
    it = iter()

    names = ["熊大", "熊二", "张三", "李四", "王五", "张六"]

    for item in range( len( names) ):
      it.add(item, names)

    forname init:
      print(name)
    #如果self.__cur不置零,那么下面没有输出
    forname init:
      print(name)


if __name__ == '__main__':
    main()

1983 发表于 2019-10-25 00:30

好吧,当做笔记来看看。。。

wxz0716 发表于 2019-10-25 07:52

感谢分享?

淮左名都 发表于 2019-10-25 07:57

学习一下

ycfnxwl 发表于 2019-10-25 08:10

来学习一下

mokson 发表于 2019-10-25 08:16

tohyueyun 发表于 2019-10-29 23:33

谢谢分享。给你点赞。 {:1_919:}

愚昧的二哥 发表于 2019-10-30 08:46

学习下。

c253302 发表于 2019-11-14 23:20

好吧,当做笔记来看看。。。

opensad 发表于 2019-11-15 09:08

语法都学过了,但还是看不懂程序{:1_923:}
页: [1] 2
查看完整版本: python利器--迭代器