在Python中,类型的确切规范是(1)序列(2)可迭代类型?

问题描述:

什么方法必须在一个类定义来实现,以便它可以被看作是一个序列类型和迭代类型?如果他们有一个正式的定义,你是否也可以提供一个PEP或其定义的文档的参考?在Python中,类型的确切规范是(1)序列(2)可迭代类型?

the glossary

可迭代是:

__iter__()__getitem__()方法的目的。的 iterables实例包括所有类型的序列(如列表,STR,和元组) 和一些非序列类型,如字典和文件。当可迭代 对象被作为参数传递给内置函数ITER(),它 返回对象的迭代器。这个迭代器对于一组值为一次传递 是有利的。

迭代器是:

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

序列是:

可迭代该支持使用整数有效元素访问经由__getitem__()特殊方法 指数,并限定了LEN() 方法,它返回序列的长度。一些内置序列 类型是list,str,tuple和unicode。需要注意的是字典还支持 __getitem__()__len__(),但被认为是一个映射,而不是 序列,因为查找随心所欲的使用一成不变的键 而不是整数。

+0

很棒的回答。谢谢! –

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