美文网首页
Python篇-迭代器

Python篇-迭代器

作者: TianTianBaby223 | 来源:发表于2018-10-23 09:53 被阅读7次

    一 : 迭代器协议简述 :

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

    可迭代对象 : 实现了迭代器协议的对象
    协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数)使用迭代器协议访问对象

    二 : for循环内部原理

    for循环的本质就是循环所有对象,全都使用迭代器协议
    (字符串 , 列表 , 元祖 , 字典 ,集合 ,文件对象) 这些都不是可迭代对象,只不过for循环中调用了他们内部的__iter__方法,把他们变成了可迭代对象
    然后for循环调用可迭代对象的__next__方法去取值,而for循环会捕捉Stoplteration异常,终止迭代

    将字符串变为可迭代对象
    mystr = '思思'
    iter_test = mystr.__iter__()
    print(iter_test)
    
    <str_iterator object at 0x10f30a198>
    
    调用__next__方法
    print(iter_test.__next__())
    print(iter_test.__next__())
    
    思
    思
    
    第三次调用__next__报错
    print(iter_test.__next__())
    
     print(iter_test.__next__())
    StopIteration
    
    在for循环中相当于先调用__iter__()在调用__next__()

    l 先变成可迭代对象,再调用其__next__()方法

    l = [1,2,3]
    for i in l: #i_l = l.__iter__() i_l.__next__()
        print(i)
    

    for循环就是基迭代器协议提供了一个统一的可以遍历所有对象的方法,包括序列类型与非序列类型,即在遍历之前,先调用对象的__iter__方法将其转换成一个迭代器,然后使用迭代器协议去实现循环访问,这样所有的对象就可以通过for循环来遍历了

    • 遍历集合
    for i in {1,2,3}:
        print(i)
    
    • 遍历文件

    相当于将 f 变成可迭代对象f.__iter__(),然后再f.__next__(),这个迭代器对象并不是把所有的文件资源放入内存中,而是一个对象,类似于一个地址

    for i in f:
      print(i)
    
    • next()

    next__next__()效果一样

    相关文章

      网友评论

          本文标题:Python篇-迭代器

          本文链接:https://www.haomeiwen.com/subject/plqhzftx.html