3

为什么123 < list评价为True?还是list < 123False?还是list < dictTrue

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

(请注意,这是在 Python 2.7 中,在 Python 3 中可能不是这样,我还没有尝试过)

4

2 回答 2

3

在 Python2 中,文档说

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

在 Python3 中,这个疣是固定的

当操作数没有有意义的自然排序时,排序比较运算符(<、<=、>=、>)会引发 TypeError 异常。因此,像 1 < '', 0 > None 或 len <= len 这样的表达式不再有效,例如 None < None 会引发 TypeError 而不是返回 False。一个推论是对异构列表进行排序不再有意义——所有元素必须相互可比。请注意,这不适用于 == 和 != 运算符:不同类型的对象总是比较不相等。

于 2012-10-29T21:11:58.737 回答
1

这种情况下的比较是基于type()对象的:

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

>>> 123<list
True
>>> type(123)<type(list)
True
于 2012-10-29T21:09:06.103 回答