gpt4 book ai didi

python - 反转元组和反转列表有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 21:13:15 25 4
gpt4 key购买 nike

反转元组和反转列表返回不同类型的对象:

>>> reversed((1,2))
<reversed at 0x7fffe802f748>
>>> reversed([1,2])
<list_reverseiterator at 0x7fffebdd4400>

它们有相同的dir。两种类型都不是另一种类型的子类。

这是为什么呢?一个人能做什么,另一个人不能?

最佳答案

基本上,列表实现了 __reversed__ 方法并返回一个专门的对象,而 tuple 回退到 reversed 的默认实现顺序:

>>> list.__reversed__
<method '__reversed__' of 'list' objects>
>>> tuple.__reversed__
AttributeError: type object 'tuple' has no attribute '__reversed__'

现在,为什么列表不默认为序列 reversed 对象必须在列表对象本身的源代码中找到 - 可能它通过直接访问一些内部 来启用一些优化列出属性。

其实看C代码,差别不大,肯定没有什么吸引眼球的——

我敢说特殊列表 __reversed__ 实现是 Python2 天的遗留物,其中 reversed 实际上会将任何其他 Python 序列复制到 list - 所以其他序列没有特殊情况是没有意义的(当他们实现通用 enumreverse 时,它对于元组来说已经足够了)。

我很确定,如果简单地注释掉 listobject.c 上的 __reversed__ 槽,Python 及其列表就会像什么都没发生一样工作,默认为一般情况 reversed.

关于python - 反转元组和反转列表有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40165800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com