Python中内置的reversed(seq)
表示seq
必须具有__reversed__()
方法或支持序列协议。列表和元组都明显支持顺序协议,但是列表有自己的__reversed__()
方法。为什么列表有一个__reverse __()特殊方法,但元组不在Python中?
>>> hasattr(list, '__reversed__')
True
>>> hasattr(tuple, '__reversed__')
False
那么就必须在__reverse__()
比对序列协议将为扭转名单快了一些优化。于是我带着一看source code where __reversed__()
is implemented为listobject.c,并与我的可怜有限Ç的知识,我不明白为什么一个元组(tupleobject.c)不会有类似的内部倒车方法,作为一个元组,在我看来豆阵列与一些优化(PyTuple_MAXSAVESIZE
)分配和内存,列表是一个更熟悉的数组。
什么是我错过的C魔法,使实现__reversed__()
方法优化列表类型,但标准迭代器协议更好的元组?
啊,所以我把它看作一个优化_not_有一个'__reversed __()'方法元组,但它实际上只是一个不被价值实现的事情,甚至没有考虑,由于某些原因,立刻想到优化。谢谢! –