【发布时间】:2016-09-20 10:23:35
【问题描述】:
Python 内置的reversed(seq) 表示seq 必须有__reversed__() 方法或支持序列协议。列表和元组显然都支持序列协议,但列表有自己的__reversed__() 方法来代替。
>>> hasattr(list, '__reversed__')
True
>>> hasattr(tuple, '__reversed__')
False
那么__reverse__() 中的列表必须比序列协议提供的逆向优化更快。因此,我查看了 listobject.c 的source code where __reversed__() is implemented,由于我对 C 的知识有限,我无法理解为什么元组 (tupleobject.c) 没有类似的内部反转方法,因为元组在我看来是 bean对分配和内存进行了一些优化 (PyTuple_MAXSAVESIZE) 的数组,以及一个更熟悉的数组列表。
我缺少什么使实现__reversed__() 方法成为列表类型优化的C 魔法,但标准迭代器协议更适合元组?
【问题讨论】:
标签: python list tuples python-internals c-api