8

我在 SciPy 的源代码中偶然发现了这行代码,在stats 模块中:

return 1.0*(x==x)

这是返回的东西不是1.0吗?换句话说,x 的任何值是否x == x成立False

4

3 回答 3

22

根据 IEEE 754 标准,非数字 (NaN) 必须始终比较为假,无论它与什么进行比较。

Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x=float("NaN")
>>> x==x
False
于 2012-04-25T17:46:05.153 回答
9

用户定义的类型可以覆盖相等运算符来做任何你想做的事情:

Python 3.2.2 (default, Feb 10 2012, 09:23:17) 
[GCC 4.4.5 20110214 (Red Hat 4.4.5-6)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
...     def __eq__(self, other):
...         return False
... 
>>> x=A()
>>> x==x
False
于 2012-04-25T17:49:14.590 回答
3

这取决于 x 的值。我还没有查看源代码,但是假设您执行以下操作:

class A:
 def __eq__(self,other):
  return bool(random.getrandbits(1))

x = A()

现在x == x可能返回 false。

于 2012-04-25T17:50:03.513 回答