2

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

4

2 回答 2

6

词汇表

可迭代的是:

带有__iter__()or__getitem__()方法的对象。可迭代的示例包括所有序列类型(如 list、str 和 tuple)和一些非序列类型,如 dict 和 file。当可迭代对象作为参数传递给内置函数 iter() 时,它会返回该对象的迭代器。此迭代器适用于遍历一组值。

一个迭代器是:

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

一个序列是:

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

于 2012-10-07T01:45:46.247 回答
2

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

于 2012-10-07T01:45:19.160 回答