首页 编程教程正文

python利器--迭代器

piaodoo 编程教程 2020-02-22 22:10:35 1186 0 python教程

本文来源吾爱破解论坛

关于这次帖子,如果有错误的地方,还请各位指正,不胜感激。初次接触迭代器,故仅作为一篇笔记而发表。
[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 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7761.html

搜索