5
In [32]: object() > 0
Out[32]: True

事实上,它比我尝试过的任何整数都大。

4

2 回答 2

12

因为 Python 2.x 试图在不同类型的对象之间进行可用的比较(即使它们没有意义)。

它已在 Python 3 上修复:

>>> object() > 0
Traceback (most recent call last):
  File "<pyshell#320>", line 1, in <module>
    object() > 0
TypeError: unorderable types: object() > int()

Python 2.x 中使用的顺序:

None < Numbers < [Other types in alphabetical order]

数字是:intboolfloat不是complex因为它们无法比较

此外,来自旧样式类的对象(命名instance对象)出于某种奇怪的原因None而停留在两者之间。Numbers

于 2012-07-19T04:17:19.917 回答
2

它正在比较对象的地址。如果您了解 C/C++,这就是指针运算。

>>> object() < object()
True
>>> object() > object()
False

在第一个示例中,第一个 object() 恰好比第二个更早地在内存中分配,因此它“小于”另一个。

无论如何,你不应该像这样比较指针。:)

于 2012-07-19T04:24:14.680 回答