In [32]: object() > 0
Out[32]: True
事实上,它比我尝试过的任何整数都大。
因为 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
它正在比较对象的地址。如果您了解 C/C++,这就是指针运算。
>>> object() < object()
True
>>> object() > object()
False
在第一个示例中,第一个 object() 恰好比第二个更早地在内存中分配,因此它“小于”另一个。
无论如何,你不应该像这样比较指针。:)