• Python迭代对象与迭代器


    一.迭代对象

    1.概念

    迭代对象:可以直接作用于for循环的对象统称为可迭代对象:Iterable。

    2.可以直接作用于for循环的数据类型

    (1)集合类数据类型,如list, tuple, dict, set, str等

    (2)generator,包括生成器和带yield的generator function.

    以上这些直接作用于for循环的对象统称为可迭代对象:Iterable.

    3.判断一个对象是不是可迭代对象(Iterable)

    可以使用isinstance,需要导入模块
    from collections import Iterator
    from collections import Iterable

    (1)判断 str 类型是不是可迭代对象
    isinstance('',Iterable)
    isinstance('abc',Iterable)
    print(isinstance('',Iterable)) # True
    print(isinstance('abc',Iterable)) # True
    (2)判断 list 类型是不是可迭代对象
    isinstance([],Iterable)
    isinstance([1,2,3,4],Iterable)
    print(isinstance([],Iterable)) # True
    print(isinstance([1,2,3,4],Iterable)) # True
    (3)判断 元组 类型是不是可迭代对象
    isinstance(tuple(),Iterable)
    isinstance((1,2,3,4),Iterable)
    print(isinstance(tuple(),Iterable))
    print(isinstance((1,2,3,4),Iterable))
    (4)判断 集合 类型是不是可迭代对象
    isinstance(set(),Iterable)
    isinstance((1,2,3,4),Iterable)
    print(isinstance(set(),Iterable)) # True
    print(isinstance((1,2,3,4),Iterable)) # True
    (5)判断 字典 类型是不是可迭代对象
    isinstance({},Iterable)
    isinstance({'name':'wanghua','age':28},Iterable)
    print(isinstance({},Iterable)) # True
    print(isinstance({'name':'wanghua','age':28},Iterable)) # True
    (6)判断 for 循环是不是可迭代对象
    isinstance((x for x in range(10)), Iterable)
    print(isinstance((x for x in range(10)), Iterator)) # True

    二. 迭代器

    1.概念

    迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    迭代器是在python2.2中被加入的,它为类序列对象提供了一个类序列的接口。有了迭代器可以迭代一个不是序列的对象,因为他表现出了序列的行为。当在python中使用for循环迭代一个对象时,调用者几乎分辨不出他迭代的是一个迭代器对象还是一个序列对象,因为python让他(迭代器)像一个序列那样操作。

    2.判断一个对象是否是迭代器(Iterator). 可以使用isinstance,需要导入模块from collections import Iterator

    3.判断 for 循环是不是迭代器

    isinstance((x for x in range(10)), Iterator)
    print(isinstance((x for x in range(10)), Iterator)) # True
    成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
    把list、dict、str等Iterable变成Iterator可以使用iter()函数:

    >>> isinstance(iter([]), Iterator)
    True
    >>> isinstance(iter('abc'), Iterator)
    True

    你可能会问,为什么list、dict、str等数据类型不是Iterator?

    这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

    Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的

  • 相关阅读:
    Postfix邮件
    RAID和LVM磁盘阵列
    CF1400G
    CF1400F
    2020 AC Saber夏季赛 游记
    APIO2018 题解
    2020北京中考游记
    初中数学几何推理大梳理
    CF1373F Network Coverage
    部编人教版初中历史书事件影响/意义汇总
  • 原文地址:https://www.cnblogs.com/apollo1616/p/9455670.html
Copyright © 2020-2023  润新知