吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2776|回复: 12
收起左侧

[Python 转载] python利器--迭代器

  [复制链接]
山野村夫-陈墨 发表于 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)迭代结束,计数器清零。


        简单的模型:
        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()

免费评分

参与人数 4吾爱币 +4 热心值 +3 收起 理由
yjn866y + 1 + 1 热心回复!
快乐heni + 1 热心回复!
胡小贱 + 1 + 1 我很赞同!
molisehao + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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
谢谢分享。给你点赞。
愚昧的二哥 发表于 2019-10-30 08:46
学习下。
c253302 发表于 2019-11-14 23:20
好吧,当做笔记来看看。。。
opensad 发表于 2019-11-15 09:08
语法都学过了,但还是看不懂程序
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 17:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表