Pio*_*ost 27 python comparison cpython
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
Run Code Online (Sandbox Code Playgroud)
None
使用为内置类型定义的算术运算符(在本例中为整数)进行比较? Tim*_*ker 26
您可以真正使用的唯一有意义的比较None
是if obj is None:
(或if obj is not None:
).
已经从Python 3中删除了不同类型之间的比较,原因很充分 - 它们是错误的常见来源并导致混淆.例如
>>> "3" < 4
False
Run Code Online (Sandbox Code Playgroud)
在Python 3,你会得到一个TypeError
比较不同类型,如值时,str
对int
或任何对None
.
>>> None < 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < int()
Run Code Online (Sandbox Code Playgroud)
(我的意思是"比较",试图确定两个值中哪一个更大/更小.相等的比较是正确的 - False
如果两个对象属于不同类型,它将始终返回.)
我没有在文档中找到这方面的参考,但是在学习Python第4版中,Mark Lutz在第204页写道:
[...]比较不同类型的对象(例如,字符串和列表)工作 - 该语言定义了不同类型之间的固定顺序,如果不是美学上令人满意的话,这是确定性的.也就是说,排序基于所涉及类型的名称:所有整数都小于所有字符串,例如,因为
"int"
小于"str"
.
一些有趣的引用来自http://bytes.com/topic/python/answers/801701-why-none-0-a
在早期的Python中,决定任何 两个对象的比较是合法的并且将返回一致的结果.因此,不同类型的对象将根据其类型的排序(依赖于实现,未指定但是一致的排序)进行比较,并且将根据对该类型有意义的规则来比较相同类型的对象.
其他实现有权以不同方式比较整数和None,但在特定实现中,结果不会更改.
Python 3将在此类比较中引发异常.
和
问题是典型的问题; Python最初没有布尔类型,并且改造导致了奇怪的语义.C有同样的问题.