2012-10-29 46 views
3

为什么123 < list的计算结果为True?或者list < 123False?或list < dictTrue非数字Python对象的顺序比较逻辑是什么

更一般地,为什么<>当数字与函数,列表或类似事物相比较时不会引发错误?这种设计选择背后的逻辑是什么?

(注意,这是在Python 2.7,它可能不是真正在Python 3我没有尝试它尚未)

+1

这些抛出错误就像你期望在python 3中一样。 –

+2

你会发现这个问题的答案比这里的答案更丰富http://stackoverflow.com/questions/1062008/python-decimal-comparison –

回答

3

在Pytho N2的docs say

CPython的实现细节:除了 数量不同类型的对象是由它们的类型名称排序;不支持正确比较的相同类型的对象 按其地址排序。

在Python3,this wart is fixed

排序比较运算符(<,< =,> =,>)引发TypeError 异常时的操作数不具有有意义的自然顺序。 因此,诸如1 <'',0>无或len的表达式不再是 有效的,并且例如,无<无引发TypeError而不返回 False。一个推论是,排序一个异构列表不再 是有道理的 - 所有的元素必须相互比较。注意 ,这不适用于==和!=操作符:不同的不可比较类型的对象总是比较不相等。

1

在这种情况下比较是对的对象type()基地完成:

例如:type(123)'int'是和type(list)'list',所以'int'<'list'返回字符串比较是True

>>> 123<list 
True 
>>> type(123)<type(list) 
True