wim*_*wim 17 python python-internals reverse-iterator
反转元组并反转列表会返回不同类型的对象:
>>> reversed((1,2))
<reversed at 0x7fffe802f748>
>>> reversed([1,2])
<list_reverseiterator at 0x7fffebdd4400>
Run Code Online (Sandbox Code Playgroud)
他们也一样dir.这两种类型都不是另一种类型的子类.
这是为什么?一个人可以做什么,另一个不能?
jsb*_*eno 12
基本上,列表实现该__reversed__方法并返回一个专用对象,同时tuple回退到reversed任何序列的默认实现:
>>> list.__reversed__
<method '__reversed__' of 'list' objects>
>>> tuple.__reversed__
AttributeError: type object 'tuple' has no attribute '__reversed__'
Run Code Online (Sandbox Code Playgroud)
现在,为什么列表不默认为序列reversed对象必须在列表对象本身的源代码中找到 - 可能它通过直接访问一些内部list属性来实现一些优化.
实际上看C代码,没有什么区别,当然没有任何东西吸引眼球 -
我敢说特殊列表__reversed__实现是Python2天的剩余部分,它 reversed 实际上会将任何其他Python序列复制到list- 所以其他序列没有任何意义可以为它设置特殊情况(当它们确实实现了enumreverse它时)对于元组来说已经足够好了.
我很确定如果只是简单地注释掉 __reversed__插槽listobject.c,Python及其列表就会好像没有发生任何事情,默认为一般情况reversed.
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |