这个问题在这里已经有答案了:

Python 有内置数据类型吗? 除了 None, ,其中:

>>> not foo > None
True

在哪里 foo 是那种类型的值?Python 3 怎么样?

有帮助吗?

解决方案

None 始终小于 Python 2 中的任何数据类型(请参阅 object.c).

在 Python 3 中,这一点发生了改变;现在在没有合理的自然排序的情况下对事物进行比较会导致 TypeError. 。来自 3.0“新内容”更新:

Python 3.0 简化了排序比较的规则:

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

这让一些人感到不安,因为做一些事情通常很方便,比如对包含一些内容的列表进行排序。 None 其中的值,并且有 None 值在开头或结尾处聚集在一起。 邮件列表上有一个关于此的主题 不久前,但最终的要点是 Python 3 试图避免对排序做出任意决定(这在 Python 2 中经常发生)。

其他提示

来自Python 2.7.5 来源 (object.c):

static int
default_3way_compare(PyObject *v, PyObject *w)
{
    ...
    /* None is smaller than anything */
    if (v == Py_None)
            return -1;
    if (w == Py_None)
            return 1;
    ...
}

编辑:添加了版本号。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top