为什么123 < list
评估为True
?还是list < 123
到False
?或list < dict
到True
?
更一般地说,为什么<
或>
在将数字与函数,列表或类似事物进行比较时不会引发错误?这种设计选择背后的逻辑是什么?
(请注意,这是在Python 2.7中,在Python 3中可能不是这样,我还没有尝试过)
答案 0 :(得分:3)
在Python2中,docs say:
CPython实现细节:除了以外的不同类型的对象 数字按其类型名称排序;相同类型的对象 不支持正确比较的,按其地址排序。
在Python3中,this wart is fixed:
排序比较运算符(&lt;,&lt; =,&gt; =,&gt;)引发TypeError 当操作数没有有意义的自然顺序时的异常。 因此,表达式如1&lt; '',0&gt;无或len&lt; = len不再 有效,例如无&lt; None引发TypeError而不是返回 假。一个必然结果是不再对异构列表进行排序 有道理 - 所有元素必须相互比较。注意 这不适用于==和!=运算符:对象 不同的无与伦比的类型总是比较不相等。
答案 1 :(得分:1)
在这种情况下的比较是在type()
个对象的基础上完成的:
例如:type(123)
为'int'
,type(list)
为'list'
,因此'int'<'list'
的字符串比较将返回True
>>> 123<list
True
>>> type(123)<type(list)
True