• python 迭代器


    可迭代对象

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

    (iterable)。可以用isinstance()去判断一个对象是否是iterable对象。

    数据类型

    可以直接作用于for循环的数据类型一般分为两种

    1.集合数据类型,如list、tuple、dict、set、string

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

    引入collections

    使用需要引入collections中的Iterable。

    示例如下:

    from collections import Iterable

    注意:从collections中导入,从python3.3已经弃用,到python3.9时将停止使用。

    可以用从collections.abc中导入

    示例如下:

    from collections.abc import Iterable

    判断是否可迭代对象

    使用示例:

    1. print(isinstance([], Iterable))
    2. print(isinstance((), Iterable))
    3. print(isinstance({}, Iterable))
    4. print(isinstance("", Iterable))
    5. print(isinstance("zhangsan", Iterable))
    6. print(isinstance((x for x in range(10)), Iterable))
    7. print(isinstance(1, Iterable))
    8. # 运算结果
    9. # True
    10. # True
    11. # True
    12. # True
    13. # True
    14. # True
    15. # False

    Next函数调用

    迭代器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,

    直到最后抛出StopIteration错误,表示无法继续返回下一个值。

    示例如下:

    1. num = (x for x in range(5))
    2. print(next(num))
    3. print(next(num))
    4. # 运算结果
    5. # 0
    6. # 1

    Iterator对象

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

    引入Iterator

    示例如下:

    from collections.abc import Iterator

    判断Iterator对象

    Isinstance()函数还可以用来判断一个对象是否是Iterator对象。

    示例如下:

    1. print(isinstance([], Iterator))
    2. print(isinstance((), Iterator))
    3. print(isinstance({}, Iterator))
    4. print(isinstance("", Iterator))
    5. print(isinstance("zhangsan", Iterator))
    6. print(isinstance((x for x in range(10)), Iterator))
    7. print(isinstance(1, Iterator))
    8. # 运算结果
    9. # False
    10. # False
    11. # False
    12. # False
    13. # False
    14. # True
    15. # False

    转化Iterator对象

    可以通过iter函数转化为Iterator对象。

    示例如下:

    1. iter1 = iter([1, 2, 3, 4, 5, 6])
    2. print(next(iter1))
    3. print(next(iter1))
    4. # 运算结果
    5. # 1
    6. # 2

    总结

    python 迭代器相关知识学习笔记

  • 相关阅读:
    Qt CMake 国际化相关配置
    add_precompiled_header
    JAVA项目中什么是DTO、DAO、PO、Controller、Common
    GD32F450的时钟笔记
    图像超分辨率重构实战
    2023年【上海市安全员A证】报名考试及上海市安全员A证试题及解析
    .Net 中间件 - 新开源代码生成器 -ReZero
    【C++】父类与子类的那些事
    Java_断点调试/类变量/类方法/main语法
    猿创征文|docker本地私人仓库快速搭建后的安全优化(用户鉴权和简易的web界面开启)
  • 原文地址:https://blog.csdn.net/json_ligege/article/details/134537947