除了None
以外,是否存在Python内置的数据类型,满足以下条件:
>>> not foo > None
True
如果foo
是那种类型的值怎么办?Python 3呢?
除了None
以外,是否存在Python内置的数据类型,满足以下条件:
>>> not foo > None
True
如果foo
是那种类型的值怎么办?Python 3呢?
None
始终小于任何数据类型(参见object.c
)。TypeError
异常。从Python 3.0的“新特性”更新中可以看到:<
、<=
、>=
和>
)会引发TypeError
异常。因此,诸如1 < ''
、0 > None
或者len <= len
之类的表达式不再有效,而None < None
也将引发TypeError
而不是返回False
。一个推论是,对于异构列表进行排序不再有意义-所有元素必须可相互比较。请注意,这不适用于==
和!=
运算符:不同类型的不可比较对象始终不相等。这让一些人感到不满,因为通常需要对一个列表进行排序,而该列表中有一些None
值,并且希望这些None
值出现在开头或结尾。有一段时间邮件列表上有关于此的讨论,但最终的观点是,Python 3试图避免对排序做出任意决策(这在 Python2 中经常发生)。
None<0
返回True
),显然在Python 3中,这是通过禁止这种比较来处理的 - 这确实是一个巨大的“改进”...!;-) - Rolf Bartstra来自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;
...
}
编辑: 添加了版本号。