其对象包含编号元素的任何Python类型都称为序列类型吗?

其对象包含编号元素的任何Python类型都称为序列类型吗?,python,Python,我对那个问题困惑了很长时间。其对象包含编号元素的任何Python类型都称为序列类型吗?序列是遵循序列协议的类型。这不仅意味着索引是数字的,而且它们是连续的,从零开始,按索引递增的顺序迭代生成元素,len(my_序列)。在实践中,这意味着他们需要适当地实现\uuu getitem\uuuuuuuuuu和\uuuuu len\uuuuuuuuu方法。从这里开始,Python可以“填补空白”,这样迭代、my_序列中的x和反转(my_序列)都可以在不实现相关方法的情况下工作,但它们仍然可以选择实现这些方

我对那个问题困惑了很长时间。其对象包含编号元素的任何Python类型都称为序列类型吗?

序列是遵循序列协议的类型。这不仅意味着索引是数字的,而且它们是连续的,从零开始,按索引递增的顺序迭代生成元素,
len(my_序列)
。在实践中,这意味着他们需要适当地实现
\uuu getitem\uuuuuuuuuu
\uuuuu len\uuuuuuuuu
方法。从这里开始,Python可以“填补空白”,这样迭代、my_序列中的
x
反转(my_序列)
都可以在不实现相关方法的情况下工作,但它们仍然可以选择实现这些方法,特别是如果它们可以提供更高效的实现的话(例如,默认的迭代行为就像是刚刚从
i=0
尝试
self[i]
,直到它碰到一个
索引器
,这对于链表来说并不理想)。

python中的序列是容器(即它们有一个
\uu contains\ucode>方法),是可迭代的(即,他们有一个
\uuuu iter\uuu
方法)和大小(即他们有一个
\uu len\uuu
方法)。他们还有以下方法:

__getitem__
__reversed__
index
count
__setitem__
__delitem__
insert
append
reverse
extend
pop
remove
__iadd__
这些是基本的不可变序列,为了使其可变,它们还将具有以下方法:

__getitem__
__reversed__
index
count
__setitem__
__delitem__
insert
append
reverse
extend
pop
remove
__iadd__

应该回答您的问题。所有具有类似于序列的行为(按照指定的协议)是一种序列类型。如果它看起来像序列,那么它就是序列。Hello Duck Typing,它们有一个长度。
\uu len\uuu
\uu getitem\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
都必须实现。非常感谢!我知道您实际上不需要
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu最后引发一个异常就足够了。
\uuuuu reversed\uuuuu
也是可选的(
reversed
可以使用
\uuuu getitem\uuuuuu
\uu len\uuuuuu
)。
索引
计数
由内置序列提供,但它们不是必需的(例如,numpy数组不提供它们)@lvc这很有启发性,谢谢。什么是序列型索引?我想它们必须有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
。默认的itertion行为对i有效
。计数(0):产生mysequence[i]
,当其中一个错误时停止。反向迭代使用类似的策略,除了在末尾开始(因此需要
len(mysequence)
才能工作)我相信它谨慎地避免了对负指数是否有效的假设。