zoukankan      html  css  js  c++  java
  • 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可能出现的错误,待更/todo
    mongoose的安装与使用(书签记录) 2017
    HTTP的学习记录3--HTTPS和HTTP
    HTTP的学习记录(二)头部
    HTTP(一)概述
    LeetCode 455. Assign Cookies
    LeetCode 453. Minimum Moves to Equal Array Elements
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 447. Number of Boomerangs
    LeetCode 416. Partition Equal Subset Sum
  • 原文地址:https://www.cnblogs.com/gongfuxiaozhen/p/8654953.html
Copyright © 2011-2022 走看看