考虑 Python 中的以下问题:
>>> () < []
这条语句产生False并
False
>>> () > []
结果是 True。据我所知,[]equals False,但是空元组是什么?
[]
如果我们输入
>>> 1233 < (1,2)
我们得到一个True作为返回值。但是为什么呢?
True
来自文档:
运算符 <、>、==、>=、<= 和 != 比较两个对象的值。对象不必具有相同的类型。如果两者都是数字,则它们将转换为通用类型。否则,不同类型的对象始终比较不相等,并且顺序一致但任意。您可以通过定义方法__cmp__或丰富的比较方法来控制非内置类型对象的比较行为,如__gt__第 3.4 节中所述。 (这种不寻常的比较定义是为了简化排序以及 in 和 not in 运算符等操作的定义。 将来,不同类型的对象的比较规则可能会发生变化。)
运算符 <、>、==、>=、<= 和 != 比较两个对象的值。对象不必具有相同的类型。如果两者都是数字,则它们将转换为通用类型。否则,不同类型的对象始终比较不相等,并且顺序一致但任意。您可以通过定义方法__cmp__或丰富的比较方法来控制非内置类型对象的比较行为,如__gt__第 3.4 节中所述。
__cmp__
__gt__
(这种不寻常的比较定义是为了简化排序以及 in 和 not in 运算符等操作的定义。 将来,不同类型的对象的比较规则可能会发生变化。)
这是真的。在 Python 3 中,这是一个TypeError。
TypeError
() > [] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-d2326cfc55a3> in <module>() ----> 1 () > [] TypeError: unorderable types: tuple() > list()
回到python 2:文档强调这是一个任意但一致的排序。
在cPython 2 中,不相等的类型通过其类型名称进行比较。按字典顺序排列的tuple“大于”也是如此list。
tuple
list