我偶然發現在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