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 __()'方法元組,但它實際上只是一個不被價值實現的事情,甚至沒有考慮,由於某些原因,立刻想到優化。謝謝! –