一切都比无强大吗?

是否有一个 Python 内置的数据类型 除了 None:

>>> not foo > None
True

其中 foo是该类型的值? Python3如何?

17519 次浏览

None总是小于 Python 2中的任何数据类型(参见 object.c)。

在 Python3中,这种情况发生了改变; 现在对事物进行比较时,如果没有合理的自然顺序,结果就是 TypeError。来自 一个 href = “ https://docs.python.org/3/whatsnew/3.0.html # ordering-properties”rel = “ noReferrer”> 3.0“ what’s new”update :

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

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

这让一些人感到不安,因为对一个包含一些 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;
...
}

编辑 : 添加版本号。