zoukankan      html  css  js  c++  java
  • 迭代器

    一、概念

    #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值
    while True: #只是单纯地重复,因而不是迭代
        print('===>')
       
    l=[1,2,3]
    count=0
    while count < len(l): #迭代
        print(l[count])
        count+=1

    二、为何要有迭代器?什么是可迭代对象?什么是迭代器对象?

    释义

    三、迭代器对象的使用

    dic={'a':1,'b':2,'c':3}
    iter_dic=dic.__iter__() #得到迭代器对象,迭代器对象即有__iter__又有__next__,但是:迭代器.__iter__()得到的仍然是迭代器本身
    iter_dic.__iter__() is iter_dic #True
    
    print(iter_dic.__next__()) #等同于next(iter_dic)
    print(iter_dic.__next__()) #等同于next(iter_dic)
    print(iter_dic.__next__()) #等同于next(iter_dic)
    # print(iter_dic.__next__()) #抛出异常StopIteration,或者说结束标志
    
    #有了迭代器,我们就可以不依赖索引迭代取值了
    iter_dic=dic.__iter__()
    while 1:
        try:
            k=next(iter_dic)
            print(dic[k])
        except StopIteration:
            break
            
    #这么写太丑陋了,需要我们自己捕捉异常,控制next,python这么牛逼,能不能帮我解决呢?能,请看for循环
    释义

    四、for循环

    #基于for循环,我们可以完全不再依赖索引去取值了
    dic={'a':1,'b':2,'c':3}
    for k in dic:
        print(dic[k])
    #for循环的工作原理
    #1:执行in后对象的dic.__iter__()方法,得到一个迭代器对象iter_dic
    #2: 执行next(iter_dic),将得到的值赋值给k,然后执行循环体代码
    #3: 重复过程2,直到捕捉到异常StopIteration,结束循环
     
    五、迭代器的优缺点
    #优点: - 提供一种统一的、不依赖于索引的迭代方式
      - 惰性计算,节省内存
    #缺点:
      - 无法获取长度(只有在next完毕才知道到底有几个值)
      - 一次性的,只能往后走,不能往前退

    六、示例

    # 例1
    # names=["egon","alex","lxx"]
    # names="abcdefg"
    
    # i=0
    # while i < len(names):
    #     print(names[i])
    #     i+=1
    
    # 例2:
    # c="hello"
    # d=["a",'B','C']
    # e=("a",'B','C')
    # a={"k1":111}
    # g={111,222,333}
    # f=open("a.txt",'w')
    
    # dic={'k1':111,"k2":222,'k3':333}
    # dic={111,222,333}
    # iter_dic=dic.__iter__()
    
    # print(iter_dic.__iter__() is iter_dic)
    # print(iter_dic)
    
    # res=iter_dic.__next__()
    # print(res)
    #
    # res=iter_dic.__next__()
    # print(res)
    #
    # res=iter_dic.__next__()
    # print(res)
    #
    # res=iter_dic.__next__()
    # print(res)
    
    dic={111,222,333}
    iter_dic=dic.__iter__()
    
    while True:
        try:
            print(iter_dic.__next__())
        except StopIteration:
            break
    print('='*50)
    iter_dic=dic.__iter__()
    while True:
        try:
            print(iter_dic.__next__())
        except StopIteration:
            break
    示例
  • 相关阅读:
    Windows SDK编程(Delphi版) 之 应用基础,楔子
    一个小问题引发的论证思考
    Delphi 组件开发教程指南(7)继续模拟动画显示控件
    用PyInstaller将python转成可执行文件exe笔记
    使用 .Net Memory Profiler 诊断 .NET 应用内存泄漏(方法与实践)
    Microsof Office SharePoint 2007 工作流开发环境搭建
    How to monitor Web server performance by using counter logs in System Monitor in IIS
    LINQ之Order By
    window 性能监视器
    内存泄露检测工具
  • 原文地址:https://www.cnblogs.com/datatool/p/13508456.html
Copyright © 2011-2022 走看看