• python 迭代器(一):迭代器基础(一) 语言内部使用 iter(...) 内置函数处理可迭代对象的方式


    简介

    在 Python 中,所有集合都可以迭代。在 Python 语言内部,迭代器用于支持:

    1.for 循环
    2.构建和扩展集合类型
    3.逐行遍历文本文件
    4.列表推导、字典推导和集合推导
    5.元组拆包
    6.调用函数时,使用 * 拆包实参

    语言内部使用 iter(...) 内置函数处理可迭代对象的方式

    序列可以迭代的原因:iter函数
    解释器需要迭代对象 x 时,会自动调用 iter(x)。
    内置的 iter 函数有以下作用。
    (1) 检查对象是否实现了 __iter__ 方法,如果实现了就调用它,获取一个迭代器。
    (2) 如果没有实现 __iter__ 方法,但是实现了 __getitem__ 方法,Python 会创建一个迭代器,尝试按顺序(从索引 0 开始)获取元素。
    (3) 如果尝试失败,Python 抛出 TypeError 异常,通常会提示“C object is not iterable”(C 对象不可迭代),其中 C 是目标对象所属的类。
    任何 Python 序列都可迭代的原因是,它们都实现了 __getitem__ 方法。其实,标准的序列也都实现了 __iter__ 方法,因此你也应该这么做。
    之所以对 __getitem__ 方法做特殊处理,是为了向后兼容,而未来可能不会再这么做(不过,写作本书时还未弃用)。
     
    迭代对象之前显式检查对象是否可迭代或许没必要,毕竟尝试迭代不可迭代的对象时,Python 抛出的异常信息很明确:TypeError: 'C'
    object is not iterable。如果除了抛出 TypeError 异常之外还要做进一步的处理,可以使用 try/except 块,而无需显式检查
    。如果要保存对象,等以后再迭代,或许可以显式检查,因为这种情况可能需要尽早捕获错误。
     
     
  • 相关阅读:
    捡来的一个大数模版。很好用
    小探catlan数
    hdu1060数学题求幂最左边的数
    食物相克
    工作 瓶颈 思路问题
    从用户态open到内核驱动实现
    内核代码 结构
    I2C原理
    asm
    man 2 3 5 普通命令(1) 函数库(3)
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12964807.html
Copyright © 2020-2023  润新知