Python中x == x是否为假?

时间:2012-04-21 13:53:40

标签: python floating-point equality

我在stats module中偶然发现了SciPy源代码中的这一行代码:

return 1.0*(x==x)

这是否会返回1.0以外的内容?换句话说,x的值是否为x == x保持False

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:3)

取决于x的值。我没看过来源,但是假设你做了这样的事情:

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

x = A()

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