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
吗? 答案 0 :(得分:23)
您可以与None
真正使用的唯一有意义的比较是if obj is None:
(或if obj is not None:
)。
不同类型之间的比较已从Python 3中删除,原因很充分 - 它们是错误的常见来源并导致混淆。例如
>>> "3" < 4
False
在Python 3中,在比较不同类型的值时会得到TypeError
,例如str
与int
或任何与None
的对比。
>>> None < 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < int()
(我的意思是“比较”,试图确定两个值中哪一个更大/更小。相等的比较是正常的 - 如果两个对象的类型不同,它将始终返回False
。)< / p>
我没有在文档中找到这方面的参考,但在Learning Python, 4th edition中,Mark Lutz在第204页写道:
[...]比较不同类型的对象(例如,字符串和a list)work - 该语言定义了不同的固定顺序 类型,这是确定性的,如果不是美学上令人愉悦的话。那是, 排序基于所涉及类型的名称:所有整数 例如,因为
"int"
小于所有字符串,所以少于所有字符串"str"
。
答案 1 :(得分:6)
来自http://bytes.com/topic/python/answers/801701-why-none-0-a
的一些有趣的引用在早期的Python中,决定对任何进行比较 两个对象是合法的,并将返回一致的结果。所以对象 不同类型的将根据他们的订单进行比较 类型(依赖于实现,未指定但是一致) 订购),将根据相似类型的对象进行比较 对这种类型有意义的规则。
其他实现有权比较整数和None 不同,但在具体实施方面,结果不会 变化
Python 3将在此类比较中引发异常。
和
问题是典型的问题; Python原本没有 布尔类型,并且改造导致奇怪的语义。 C有 同样的问题。