一切都大于无?

是否有一个Python内置的数据types, 除了None ,其中:

 >>> not foo > None True 

foo是哪种types的值? 那么Python 3呢?

None总是小于Python 2中的任何数据types(请参阅object.c )。

在Python 3中,这已经改变了; 现在比较事物没有一个明智的自然sorting导致TypeError 。 从3.0版“新function”更新

Python 3.0简化了sorting比较的规则:

当操作数没有有意义的自然sorting时,sorting比较运算符( <<=>=> )会引发TypeErrorexception。 因此,如下所示的expression式: 1 < ''0 > Nonelen <= len不再有效,例如None < None引发TypeError而不返回False 。 一个推论就是sorting一个异构列表不再有意义 – 所有的元素必须是可比较的。 请注意,这不适用于==!=运算符:不同types的对象总是比较不相等。

这让一些人感到不安,因为做这样的事情往往很方便,比如sorting一些有None值的列表,并在开始或结束时将None值聚集在一起。 关于这个问题,邮件列表上有一个线索 ,但最终的观点是,Python 3试图避免对sorting(这是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; ... } 

编辑 :添加版本号。