为什么123 < list
评价为True
?还是list < 123
去False
?还是list < dict
去True
?
更一般地说,当将数字与函数、列表或类似事物进行比较时,为什么会引发<
或不引发错误?>
这种设计选择背后的逻辑是什么?
(请注意,这是在 Python 2.7 中,在 Python 3 中可能不是这样,我还没有尝试过)
为什么123 < list
评价为True
?还是list < 123
去False
?还是list < dict
去True
?
更一般地说,当将数字与函数、列表或类似事物进行比较时,为什么会引发<
或不引发错误?>
这种设计选择背后的逻辑是什么?
(请注意,这是在 Python 2.7 中,在 Python 3 中可能不是这样,我还没有尝试过)
在 Python2 中,文档说:
CPython 实现细节:除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。
在 Python3 中,这个疣是固定的:
当操作数没有有意义的自然排序时,排序比较运算符(<、<=、>=、>)会引发 TypeError 异常。因此,像 1 < '', 0 > None 或 len <= len 这样的表达式不再有效,例如 None < None 会引发 TypeError 而不是返回 False。一个推论是对异构列表进行排序不再有意义——所有元素必须相互可比。请注意,这不适用于 == 和 != 运算符:不同类型的对象总是比较不相等。
这种情况下的比较是基于type()
对象的:
例如:type(123)
is'int'
和type(list)
is 'list'
,所以字符串比较'int'<'list'
返回为True
>>> 123<list
True
>>> type(123)<type(list)
True