除了 之外None
,是否还有 Python 内置数据类型:
>>> not foo > None
True
foo
该类型的值在哪里?Python 3 怎么样?
除了 之外None
,是否还有 Python 内置数据类型:
>>> not foo > None
True
foo
该类型的值在哪里?Python 3 怎么样?
None
总是小于 Python 2 中的任何数据类型(请参阅 参考资料object.c
)。
在 Python 3 中,这发生了变化;现在对没有合理自然排序的事物进行比较会得到 a TypeError
。从3.0“新功能”更新:
Python 3.0 简化了排序比较的规则:
当操作数没有有意义的自然排序时,排序比较运算符 (
<
,<=
,>=
,>
) 会引发异常。因此,诸如:或or之类的TypeError
表达式不再有效,例如raises而不是返回。一个推论是对异构列表进行排序不再有意义——所有元素必须相互可比。请注意,这不适用于and运算符:不同类型的对象总是比较不相等。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;
...
}
编辑:添加版本号。