为什么123 < list
的计算结果为True
?或者list < 123
到False
?或list < dict
至True
?非数字Python对象的顺序比较逻辑是什么
更一般地,为什么<
或>
当数字与函数,列表或类似事物相比较时不会引发错误?这种设计选择背后的逻辑是什么?
(注意,这是在Python 2.7,它可能不是真正在Python 3我没有尝试它尚未)
为什么123 < list
的计算结果为True
?或者list < 123
到False
?或list < dict
至True
?非数字Python对象的顺序比较逻辑是什么
更一般地,为什么<
或>
当数字与函数,列表或类似事物相比较时不会引发错误?这种设计选择背后的逻辑是什么?
(注意,这是在Python 2.7,它可能不是真正在Python 3我没有尝试它尚未)
在Pytho N2的docs say:
CPython的实现细节:除了 数量不同类型的对象是由它们的类型名称排序;不支持正确比较的相同类型的对象 按其地址排序。
在Python3,this wart is fixed:
排序比较运算符(<,< =,> =,>)引发TypeError 异常时的操作数不具有有意义的自然顺序。 因此,诸如1 <'',0>无或len的表达式不再是 有效的,并且例如,无<无引发TypeError而不返回 False。一个推论是,排序一个异构列表不再 是有道理的 - 所有的元素必须相互比较。注意 ,这不适用于==和!=操作符:不同的不可比较类型的对象总是比较不相等。
在这种情况下比较是对的对象type()
基地完成:
例如:type(123)
'int'
是和type(list)
是'list'
,所以'int'<'list'
返回字符串比较是True
>>> 123<list
True
>>> type(123)<type(list)
True
这些抛出错误就像你期望在python 3中一样。 –
你会发现这个问题的答案比这里的答案更丰富http://stackoverflow.com/questions/1062008/python-decimal-comparison –