我偶然发现在SciPy的的源代码这行代码,在stats module:在Python中,x == x是否是False?
return 1.0*(x==x)
比1.0
其他这回事情?换句话说,是否有任何x的值,使得x == x
包含False
?
我偶然发现在SciPy的的源代码这行代码,在stats module:在Python中,x == x是否是False?
return 1.0*(x==x)
比1.0
其他这回事情?换句话说,是否有任何x的值,使得x == x
包含False
?
根据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
你说得对,的确如此: >>> import numpy as np >>> np.nan == np.nan False – astrojuanlu 2012-04-26 07:48:12
用户定义类型可以重写等式操作符做任何你想要的:
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
取决于x的值。我没有看过的来源,但让我们说你做这样的事情:
class A:
def __eq__(self,other):
return bool(random.getrandbits(1))
x = A()
现在x == x
可能返回false。
在这种情况下'x'是什么?它是否实现了'__eq__'方法?这种方法的回报是否会导致意想不到的事情?更多的背景可能是必要的。 – 2012-04-25 17:47:15
我不确定我应该接受哪个答案是正确的,因为a)关于'NaN'和覆盖'__eq__'方法的答案都有他们的观点,并且b)我意识到*为什么这个代码在那里:*它是意味着返回一个与'x' *完全相同大小的数组。 – astrojuanlu 2012-04-26 07:50:29
@NeilG告诉SciPy开发者... – astrojuanlu 2012-04-28 07:54:27