所以这一直困扰着我,我无法在网上找到任何关于它的信息。有人可以在python中解释这种行为吗?为什么它返回 True 而不是抛出异常?谢谢
In [1]: 1 < [1, 2, 3]
Out[1]: True
所以这一直困扰着我,我无法在网上找到任何关于它的信息。有人可以在python中解释这种行为吗?为什么它返回 True 而不是抛出异常?谢谢
In [1]: 1 < [1, 2, 3]
Out[1]: True
它确实抛出了一个异常——这些天,无论如何:
$ python3
Python 3.3.0 (default, Apr 17 2013, 13:40:43)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 < [1,2,3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < list()
在过去,Python 曾经让比较像这样通过,因为有时能够在异构容器中自动对所有内容进行排序很方便,但这导致的错误多于它带来的便利性,因此它在 Python 3 中得到了修复。
这是一种使排序更容易的尝试。Python 试图使没有有意义的比较操作的对象以一致但任意的顺序进行比较。在 Python 3 中,他们改变了它;这将是 Python 3 中的 TypeError。
如果我没记错的话,您在 py2 中看到的行为实际上是在比较类型。
>>> 1 < [1,2,3]
True
>>> 1 > [1,2,3]
False
>>> int < list
True
>>> int > list
False
当我进一步深入研究时,我认为它比较了类型的名称,尽管可能有些间接,也可能通过其中之一进行比较,尽管我不知道:
>>> repr(int)
"<type 'int'>"
>>> int.__name__
'int'
>>> repr(list)
"<type 'list'>"
>>> list.__name__
'list'
>>> 'int' < 'list'
True
>>> "<type 'int'>" < "<type 'list'>"
True