• python_迭代器


    1.可迭代对象:

    可直接用于for循环的对象统称为可迭代对象(Iterable)。

    目前我们已经知道的可迭代(可用于for循环)的数据类型有:

    • 集合数据类型:如list、tuple、dict、set、str等
    • 生成器(Generator)

    可以使用isinstance()来判断一个对象是否是Iterable对象:

    from collections import Iterable
    print(isinstance([], Iterable))

    2. 迭代器:

      可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

      生成器也是迭代器。可以使用isinstance()来验证一下:

    from collections import Iterator
    print(isinstance((x for x in range(5)), Iterator))

    3.迭代器理解

    实际上,Python中的Iterator对象表示的是一个数据流,Iterator可以被next()函数调用,且不断返回下一个数据,直到没有数据可以返回时抛出StopIteration异常错误。可以把这个数据流看做一个有序序列,但无法提前知道这个序列的长度。同时,Iterator的计算是惰性的,只有通过next()函数时才会计算并返回下一个数据

    • 生成器对象既是可迭代对象,也是迭代器: 我们已经知道,生成器不但可以作用与for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。也就是说,生成器同时满足可迭代对象和迭代器的定义;
    • 迭代器对象一定是可迭代对象,反之则不一定: 例如list、dict、str等集合数据类型是可迭代对象,但不是迭代器,但是它们可以通过iter()函数生成一个迭代器对象。

    也就是说:迭代器、生成器和可迭代对象都可以用for循环去迭代,生成器和迭代器还可以被next()方函数调用并返回下一个值。(该段来自:https://www.cnblogs.com/yyds/p/6281453.html)

    4. iter()函数 可以将可迭代对象转变成迭代器

    isinstance(iter([]),Iterator)
    True

    import itertools
    Itor =iter([3,4,5,6,7,8])  #把列表变成一个迭代器
    print(type(Itor))
    
    while True:
        try:
            value = next(Itor)
            print(value)
        except StopIteration:
            print("迭代器超界了")
            break

     5. 迭代器其实是一个流的操作,例如文件流

    file = open("debug.txt","r",encoding="utf-8")
    for lineMsg in file:#这里的file其实是一个迭代器
        print(lineMsg)
     
  • 相关阅读:
    JSON 体验JSON (二)json格式化日期
    让D2006的控件面板回到D7的样式
    突破网站限制 复制网页内容
    欢迎光临
    加密Access数据库
    取得程序中一些特殊文件夹的位置
    连接带密码的Access数据库
    我被强暴,老公这样回答是人么?(转~非黄)
    【WinCE版凯立德】2012春季版地图下载
    刚刚拍到的日环食金星凌日
  • 原文地址:https://www.cnblogs.com/gongfuxiaozhen/p/8654953.html
Copyright © 2020-2023  润新知