除了之外None
,还有Python内置的数据类型吗?
>>> not foo > None
True
foo
该类型的值在哪里?Python 3呢?
Answers:
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中经常发生)。
None<0
return True
),并且显然在Python 3中,通过完全禁止这种比较来处理-确实是一个巨大的“改进”!;-)
从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;
...
}
编辑:添加了版本号。