• python 迭代器


    什么是迭代:

    迭代:指的是一个重复的过程,每次重复称为一次迭代,并且每次重复的结果是下一次重复的初始值

    为什么要有迭代器:

    #对于序列类型:str,list,tuple,可以依赖索引来迭代取值
    #但是对于dict,set,文件,python必须为我们提供一种不依赖于索引的迭代取值的方式=》迭代器

    可迭代对象:(即内置有obj.__iter__()方法)

    name="egon"
    l=[1,2,3]
    t=(1,2,3)
    d={"name":"egon","age":18,"sex":"male"}
    s={"a","b","c"}
    f=open("file.txt","r",encoding="utf-8")
    
    name.__iter__()     #字符串类型为可迭代对象;也可以写成name_iter=iter(name)
    l.__iter__()          #列表类型为可迭代对象
    t.__iter__()          #元组类型为可迭代对象
    d.__iter__()          #字典类型为可迭代对象
    s.__iter__()          #集合类型为可迭代对象
    f.__iter__()          #文件类型为可迭代对象

    迭代器对象:(即内置既有obj.__iter__()方法也有obj.__next__()方法)

    文件对象本身即内置既有obj.__iter__()方法也有obj.__next__()方法是迭代器对象

    调用obj.__iter__()方法

    name="egon"
    name_iter=name.__iter__()     #调用obj.__iter__()方法可以使可迭代对象变成迭代器对象
    name_iter.__iter__()
    name_iter.__next__()

    总结:

    1、可迭代对象不一定是迭代器对象
    2、迭代器对象一定是可迭代对象
    3、调用obj.__iter__()方法,得到的是迭代器对象(对于迭代器对象,执行obj.__iter__()方法得到的仍然是它本身)

    迭代器优点:

    #优点:
    1、提供一种统一的,不依赖于索引的取值方式,为for循环的实现提供了依据
    2、迭代器同一时间在内存中只有一个值,==》更节省内存空间
    #缺点:
    1、只能往后取,并且是一次性的
    2、不能统计值的个数,即长度

    示例:

    d={"name":"egon","age":18,"sex":"male"}
    d_iter=d.__iter__()    #也可以写成d_iter=iter(d)
    #迭代器d_iter没有值了,就会抛出异常StopIteration
    
    while True:
        try:
            data=d_iter.__next__();  #也可以写成data=next(d_iter)
            print(d[data])
        except StopIteration:
            print("取值完毕")
            break

     for循环原理

    #for循环的工作原理:for循环可以称之为叫迭代器循环
    d={'a':1,'b':2,'c':3}
    
    # 1、d.__iter__()得到一个迭代器对象
    # 2、迭代器对象.__next__()拿到一个返回值,然后将该返回值赋值给k
    # 3、循环往复步骤2,直到抛出StopIteration异常for循环会捕捉异常然后结束循环
    # for k in d:
    #     print(k)
  • 相关阅读:
    Vue(小案例_vue+axios仿手机app)_go实现退回上一个路由
    nyoj 635 Oh, my goddess
    nyoj 587 blockhouses
    nyoj 483 Nightmare
    nyoj 592 spiral grid
    nyoj 927 The partial sum problem
    nyoj 523 亡命逃窜
    nyoj 929 密码宝盒
    nyoj 999 师傅又被妖怪抓走了
    nyoj 293 Sticks
  • 原文地址:https://www.cnblogs.com/baicai37/p/12558444.html
Copyright © 2020-2023  润新知