【问题标题】:What is the logic behind order comparison on non-numeric Python objects非数字 Python 对象的顺序比较背后的逻辑是什么
【发布时间】:2025-12-29 13:00:11
【问题描述】:

为什么123 < list 的计算结果为True?还是list < 123False?还是list < dictTrue

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

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

【问题讨论】:

标签: python implementation


【解决方案1】:

在 Python2 中,docs say:

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

在 Python3 中,this wart is fixed:

排序比较运算符(=、>)引发 TypeError 当操作数没有有意义的自然顺序时例外。 因此,像 1 None 或 len

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】: