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

    一、迭代器

    1、什么是迭代器:
        迭代器指的就是迭代取值的工具
        迭代是一个重复的过程,但不是单纯的重复,每次重复都是基于上一次的结果的而进行的
    
    2、迭代器作用:
          为了找到一种通用的迭代取值方案
          为了节省内存
    
    3、如何用迭代器
        内置有__iter__方法的类型都称之为可迭代的对象
        但凡调用了__iter__方法,就会将该类转换成迭代器对象
            res=值.__iter__()
    
    4、迭代器对象的特点:
    内置有__next__方法
    内置有__iter__方法-》for循环
    
    5、迭代器优缺点总结:
            优点:
                1、提供了一种不依赖于索引一种通用迭代取值方案
                2、惰性计算,节省内存
            缺点:
                1、取值麻烦
                2、无法预测值的长度
                3、一次性的
    
    6、可迭代的对象
    "hello".__iter__
    [].__iter__
    (11,).__iter__
    {"k1":111}.__iter__
    {11,22}.__iter__
    
    f=open("a.txt",mode='wt')  # 迭代器对象
    f.__iter__
    
    7、迭代器对象
    l=[11,22,33]
    iter_l=l.__iter__()
    print(iter_l.__next__())
    print(iter_l.__next__())
    print(iter_l.__next__())
    
    8、迭代器对象和迭代对象区别
    迭代器对象同时可以iter和next
    迭代对象可以iter
    迭代器对象再次iter,自己和结果判断is为True
    

    二、示例

    1、迭代
    info={'name':"egon","age":18,"gender":"male"}
    iter_info=info.__iter__()  #先将迭代对象处理成迭代器对象
    print(iter_info.__next__())  #迭代器依次取值
    print(iter_info.__next__())
    print(iter_info.__next__())
    print(iter_info.__next__())  #没值了就会报错
    print(iter_info.__iter__().__iter__()  is iter_info) #迭代器iter自己
    =======================》
        print(iter_info.__next__())
    StopIteration
    name
    age
    gender
    True
    
    2、循环迭代
    l={'name':"egon","age":18,"gender":"male"}
    
    iter_l=iter(l)  # l.__iter__()
    while True:
        try:
            print(next(iter_l))
        except StopIteration:
            break
    =============》
    name
    age
    gender
    
    3、验证迭代器的一次性
    l=[11,222,333,444,555]
    iter_l=iter(l)
    
    for item in iter_l:  #
        print(item)
    print('=====')#此处第一次取完
    for item in iter_l:  
        print(item)  #第二次取值什么都没
    ================》
    11
    222
    333
    444
    555
    ====
    
    

    三、for循环原理

    1、调用可迭代对象.__iter__(),拿到一个迭代器对象
    2、调用next(迭代对象),将返回值赋值变量item
    3、循环往复,直到抛出异常Stopiteration,for会检测异常然后结束循环
    
    示例:
    f=open('a.txt',mode='rt',encoding='utf-8')
    for line in f:
        print(line)
    
    print('======')
    for line in f:
        print(line)
    
    f.close()
    ===========》
    mac,20000,3
    
    lenovo,3000,10
    
    tesla,1000000,10
    
    chicken,200,1
    ======
    
    
  • 相关阅读:
    用OFC画多条曲线
    C# 写Windows服务
    asp.net遍历文件夹和文件
    Sqlserver常用函数收集之truncate table
    如何构建多用户商城
    asp.net 获取客户端IP
    Jquery从头学起第四讲
    c#相对路径和系统路径
    JQuery获取URL
    【转】 ASP.NET session 保存到数据库
  • 原文地址:https://www.cnblogs.com/qiukangle/p/14115533.html
Copyright © 2011-2022 走看看