为什么Python中的元组可以使用reversed但没有__reversed__?

2024-02-10

在讨论中这个答案 https://stackoverflow.com/questions/9449674/how-to-implement-a-persistent-python-list/9449852#9449852我们意识到元组没有__reversed__方法。我的猜测是创建迭代器需要改变元组。然而元组可以很好地配合reversed。为什么该方法不能用于reversed为之工作__reversed__还有?

>>> foo = range(3)
>>> foo
[0, 1, 2]
>>> list(foo.__reversed__())
[2, 1, 0]
>>> foo
[0, 1, 2]
>>> bar = (0, 1, 2)
>>> list(bar.__reversed__())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute '__reversed__'
>>> reversed(bar)
<reversed object at 0x10603b310>
>>> tuple(reversed(bar))
(2, 1, 0)

根据spec https://docs.python.org/2/library/functions.html#reversed:

反转(顺序)

返回一个反向迭代器。 seq 必须是一个具有reversed() 方法或支持序列协议(__len__() 方法和 __getitem__() 方法,其整数参数从 0)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Python中的元组可以使用reversed但没有__reversed__? 的相关文章

随机推荐