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

    一 迭代器协议

    1.迭代器协议

    •  对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)

    2.迭代特点:重复

          下一次重复是基于上一次的结果

    例:
    l=['a','b','c','d']0
    count=0
    while count < len(l):
        print(l[count]
        count+=1
    d={'a':1,'b':2,'c':3}
    for k in d:
        print(k)

    2.可迭代对象

    • python为了提供一种不依赖与索引的迭代方式,python会为一些对象内置__iter__方法
    • obj.__iter__成为可迭代的对象。
    s1='hello'
    l=[1,2,3,]
    t=(1,2,3)
    set1={1,2,3}
    d={'a':1,'b':2,'c':3}
    f=open('b.txt',encoding='utf-8')

    3.得到的迭代器特点

    • 既有__iter__又有一个__next__方法

    4.迭代器的优点

    • 提供了一种不依赖于索引的取值方式
    • 惰性计算,节省内存

    5.迭代器的缺点

    • 取值不如按照索引取值方便
    • 一次性的,只能往前走不能往后退
    • 无法获取长度

    二 迭代器的形式

     1 l=['a','b','c']
     2 #一:下标访问方式
     3 print(l[0])
     4 print(l[1])
     5 print(l[2])
     6 # print(l[3])#超出边界报错:IndexError
     7 
     8 #二:遵循迭代器协议访问方式
     9 diedai_l=l.__iter__()
    10 print(diedai_l.__next__())
    11 print(diedai_l.__next__())
    12 print(diedai_l.__next__())
    13 # print(diedai_l.__next__())#超出边界报错:StopIteration
    14 
    15 #三:for循环访问方式
    16 #for循环l本质就是遵循迭代器协议的访问方式,先调用diedai_l=l.__iter__()方法,或者直接diedai_l=iter(l),然后依次执行diedai_l.next(),直到for循环捕捉到StopIteration终止循环
    17   #for循环所有对象的本质都是一样的原理
    18 
    19 for i in l:#diedai_l=l.__iter__()
    20     print(i) #i=diedai_l.next()
    21 
    22 #四:用while去模拟for循环做的事情
    23 diedai_l=l.__iter__()
    24 while True:
    25     try:
    26         print(diedai_l.__next__())
    27     except StopIteration:
    28         print('迭代完毕了,循环终止了')
    29         break
    迭代器的例子
  • 相关阅读:
    java新手的session初体验
    菜鸟身份看泛型
    Java初学者不可不知的MyEclipse的设置技巧(自动联想功能)
    GCT之数学公式(几何部分)
    GCT之数学公式(代数部分)
    GCT之语文细节知识
    单元测试的方法
    常用的测试方法
    SQL 经典语句大全
    待处理(一)
  • 原文地址:https://www.cnblogs.com/f1443526266/p/7018354.html
Copyright © 2011-2022 走看看