使用算术运算符将None与内置类型进行比较?
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> None > 0
False
>>> None == 0
False
>>> None < 0
True
None
使用算术运算符比较是否为内置类型(在这种情况下为整数)进行了定义?- 语言规范的前两个比较部分和第三个比较部分之间的区别(Python的规范-您一定是在开玩笑))还是CPython的实现细节?
-
您真正可以使用的唯一有意义的比较
None
是if obj is None:
(或if obj is not None:
)。出于各种原因,已从Python 3中删除了不同类型之间的比较-它们是常见的错误来源,并导致混乱。例如
>>> "3" < 4 False
在Python 3中,
TypeError
比较不同类型的值(例如str
vs.int
或anys vs.)时会得到aNone
。>>> None < 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: NoneType() < int()
(在试图确定两个值中的哪个较大/较小的意义上,我的意思是“比较”。对相等性的比较是可以的-
False
如果两个对象的类型不同,它将始终返回。)我没有在文档中找到对此的参考,但是在学习Python,第4版中,Mark
Lutz在第204页上写道:[…]比较不同类型的对象(例如,字符串和列表)的工作-
该语言在不同类型之间定义了固定的顺序,这是确定性的,即使在美学上也不令人满意。也就是说,排序基于所涉及类型的名称:例如,所有整数都小于所有字符串,因为"int"
小于
"str"
。