本文来源吾爱破解论坛
关于这次帖子,如果有错误的地方,还请各位指正,不胜感激。初次接触迭代器,故仅作为一篇笔记而发表。
[Python] 纯文本查看 复制代码
''' 迭代器: 一种访问数据的方式。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 两个方法: (1)__iter__(). 含有这个方法的对象可以迭代,只有这个方法的对象不能称为迭代器。 它返回一个类(比如A),然后A类调用__next__()方法返回想要获取的值。 (2)__next__(). 这个方法用于返回A类实例的某个属性值。有__iter__()和__next__()的类才能称为迭代器。 注意:我的教材上计数器self.cur是公有方法,而且最后计数器没有置零。但是这样,我觉得有问题: (1)只能访问一次; (2)self.cur被修改后可能遗漏访问,或者重复访问 所以我修改了两个地方 (1)计数器self.cur设置为 self.__cur私有属性,禁止被对象直接操作; (2)迭代结束,计数器清零。 简单的模型: class A(){ init(): self.date iter(): return A next(): return self.date } main(): a= A() for item in a: pass1 "for item in a " 这句话执行应该是这样的: (1) a.__iter__(),返回类A (2)类A调用__next__(),返回a对象的某些属性值给item (3) pass1执行。 (1)(2)(3)循环,直到访问结束 ''' class iter(): 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.__cur],self.id[self.__cur] #计数器加一 self.__cur += 1 return ans #数据访问结束 else: #计数器清零,不然下次没有办法迭代 self.__cur = 0 raise StopIteration def main(): it = iter() names = ["熊大", "熊二", "张三", "李四", "王五", "张六"] for item in range( len( names) ): it.add(item, names[item]) for name in it: print(name) #如果self.__cur不置零,那么下面没有输出 for name in it: print(name) if __name__ == '__main__': main()
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。
- 上一篇: python多进程实现复制文件
- 下一篇: 几个ida python脚本的实战例子