In [32]: object() > 0
Out[32]: True
事实上,它比我尝试过的任何整数都要大。
答案 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]
数字是:int
,bool
和float
但不是complex
因为无法比较
此外,旧样式类(名为instance
个对象)中的对象仍然位于None
和Numbers
之间,原因有些奇怪。
答案 1 :(得分:2)
它正在比较对象的地址。如果您了解C / C ++,那就是指针算法。
>>> object() < object()
True
>>> object() > object()
False
在第一个例子中,第一个对象()恰好在内存中分配比第二个分配,因此它“小于”另一个。
无论如何,你不应该比较像这样的指针。 :)