【问题标题】:What are exact specification for a type to be a (1) sequence (2) iterable type in Python?在 Python 中将类型作为 (1) 序列 (2) 可迭代类型的确切规范是什么?
【发布时间】:2012-10-07 01:42:29
【问题描述】:

在类定义中必须实现哪些方法才能将其视为序列类型和可迭代类型?如果它们有正式的定义,您是否还可以提供对 PEP 或定义它的其他文档的参考?

【问题讨论】:

    标签: python collections


    【解决方案1】:

    来自the glossary

    一个可迭代对象是:

    具有__iter__()__getitem__() 方法的对象。示例 可迭代对象包括所有序列类型(例如 list、str 和 tuple) 以及一些非序列类型,如 dict 和 file。当一个可迭代的 对象作为参数传递给内置函数 iter(),它 返回对象的迭代器。这个迭代器适用于一次通过 在一组值上。

    一个迭代器是:

    具有 next() 方法的可迭代对象。迭代器必须有 一个返回迭代器对象本身的__iter__() 方法。一个 迭代器适用于遍历一组值。

    一个序列是:

    一个支持使用整数进行有效元素访问的可迭代对象 通过 __getitem__() 特殊方法索引并定义一个 len() 返回序列长度的方法。一些内置序列 类型是 list、str、tuple 和 unicode。注意 dict 也支持 __getitem__()__len__(),但被认为是映射而不是 比序列,因为查找使用任意不可变键 而不是整数。

    【讨论】:

      【解决方案2】:

      集合模块定义了用于定义序列和可迭代对象的抽象基类。对于可迭代,您必须定义__iter__,对于序列,您必须定义__getitem__。见http://docs.python.org/library/collections.html#collections-abstract-base-classes

      【讨论】:

        猜你喜欢
        • 2012-07-15
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 2010-09-14
        • 2014-04-26
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        相关资源
        最近更新 更多