为什么`object()> 0`在Python中是真的吗?

时间:2012-07-19 04:15:20

标签: python

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

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

2 个答案:

答案 0 :(得分: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个对象)中的对象仍然位于NoneNumbers之间,原因有些奇怪。

答案 1 :(得分:2)

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

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

在第一个例子中,第一个对象()恰好在内存中分配比第二个分配,因此它“小于”另一个。

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