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
    示例
  • 相关阅读:
    TTVNC 2.0 发布了
    软件收费问题,目前没有限制, 全部免费
    为什么服务器端要确认才能连接通过
    关于transfer file功能的使用?
    同一台机器上测试会出现很多黑块
    TTVNC 设计理念
    TTVNC 2.2发布
    redis连接池 jedis2.9.0.jar+commonspool22.4.2.jar
    Calendar add 方法 和set方法
    jar包读取包内properties文件
  • 原文地址:https://www.cnblogs.com/datatool/p/13508456.html
Copyright © 2011-2022 走看看