zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    典型相关性分析(刷题)
    轻音少女美图分享
    动漫美景
    linux下安装redis(全操作)
    前端限制对后端的请求频率
    idea自定义java方法的注释模板
    sql 语句,判断某个值在某个字段中是否存在,存在返回1,不存在返回0
    Error: Module not specified
    解决sql语句中DISTINCT和order by的冲突
    将后端传来的数据放入ul中
  • 原文地址:https://www.cnblogs.com/baicai37/p/12558444.html
Copyright © 2011-2022 走看看