在 Python 中,None 的计算结果小于零? [复制]
Posted
技术标签:
【中文标题】在 Python 中,None 的计算结果小于零? [复制]【英文标题】:In Python, None evaluates to less than zero? [duplicate] 【发布时间】:2011-11-15 01:48:16 【问题描述】:在 Python 中,None
的计算结果小于零?
ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> None < 0
True
>>> None == 0
False
>>> None > 0
False
>>>
这是预期的吗?
我猜想None
要么等于零(通过类型强制),要么所有这些语句都返回False
。
【问题讨论】:
无论如何,在 Python 3 中你不能再这样做了。它会给你这个错误:TypeError: unorderable types: NoneType() < int()
@NullUserException:很高兴知道。因为这不是我期望从 Python 中获得的那种直观行为。
别忘了,即使它是动态类型的,Python 仍然是强类型的:即不执行隐式强制。
@Daniel 如果您将bool
与int
进行比较(或者至少看起来如此),它们就是这样
为了扩展@NullUserException,布尔实际上被明确声明为整数常量0
和1
的非常薄的包装器,带有特殊的__str__
和__repr__
。数学、逻辑和其他一切在两者上的工作方式完全相同,bool
甚至是int
的子类。这与1 + 1.0
一样是隐式转换,导致浮点数。
【参考方案1】:
来自the docs:
CPython 实现细节: 除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。
NoneType
比较小于int
,因为比较似乎区分大小写。
>>> type(0)
<type 'int'>
>>> type(None)
<type 'NoneType'>
>>> 'NoneType' < 'int'
True
【讨论】:
这不可能,因为print(5 > )
给了你错误,而int > dict
@NullUserException:有趣。除非我遗漏了什么,否则这似乎与文档相矛盾。
@NullUserException: type(5) > type()
给出错误,所以这部分是一致的,尽管我不确定他们为什么像你所说的那样比较 int > dict
。但是,type(None) > type(0)
。嗯……
@NullUserException @hammar - 我在这里得到int < dict
,在 Python 2.6.6 上。但也不一致type(None) > type(0)
但None < 0
...
@NullUserException:文档说“不同类型的对象除了数字”(强调我的)。【参考方案2】:
见the manual:
不同类型的对象,除了不同的数值类型和不同的字符串类型,从不比较相等;此类对象的排序一致但任意(因此对异构数组进行排序会产生一致的结果)。
和
CPython 实现细节: 除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。
【讨论】:
我喜欢它所说的“一致但任意地订购”的部分。多么有用... 是的。您通常希望排序操作在每次使用时都能产生相同的结果。 含糊但足够了:)【参考方案3】:有意对排序和字典比较等操作进行明确定义。
[引用自Language Reference]
运算符 、==、>=、
【讨论】:
以上是关于在 Python 中,None 的计算结果小于零? [复制]的主要内容,如果未能解决你的问题,请参考以下文章