gpt4 book ai didi

python - 为什么 Python 2 中的类型顺序是固定的,而 Python 3 中的类型错误是不可排序的?

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:24 25 4
gpt4 key购买 nike

问题 1:为什么 Python 2 中的这种类型顺序是固定的?

object > type > tuple > (bytes or str) > frozenset > set > dict \
> long > list > int > float > complex > bytearray > None

True

这是因为他们一生中的id()吗?

for t in types:
print repr(t), id(t)

<type 'object'> 4439116416
<type 'type'> 4439115752
<type 'tuple'> 4439113712
<type 'str'> 4439103312
<type 'frozenset'> 4439096880
<type 'set'> 4439095648
<type 'dict'> 4439083728
<type 'long'> 4439081736
<type 'list'> 4439076128
<type 'int'> 4439074040
<type 'float'> 4439065096
<type 'complex'> 4439029656
<type 'bytearray'> 4439016144
None 4439091192

或者,因为 Python 内置导入时间?在另一个 shell 中结果相同:

Python 2.7.9 (default, Jan 29 2015, 06:27:40)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> object > type > tuple > (bytes or str) > frozenset > set > dict > long > list > int > float > complex > bytearray > None
True

无论在 Python 3 中如何测试,它都会是一个 TypeError:

Python 3.4.3 (default, Feb 25 2015, 21:28:45)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> object > type > tuple > (bytes or str) > frozenset > set > dict > long > list > int > float > complex > bytearray > None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: type() > type()

问题 2:为什么这是 Python 3 中的 TypeError

最佳答案

  1. 因为 Python 的开发人员就是这样决定的。该顺序在解释器中进行了硬编码(至少对于 CPython;其他实现可能会有所不同)。我们的想法是让一个包含各种数据类型的列表以一致的顺序排序。

  2. 因为 Python 的开发人员认为他们在 Python 2.x 的行为上犯了一个错误,并认为“显式优于隐式”。现在,在对包含不同类型项目的列表进行排序时,您必须提供一个 key 函数,以确保您得到的正是您想要的。

关于python - 为什么 Python 2 中的类型顺序是固定的,而 Python 3 中的类型错误是不可排序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29618165/

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