[英]What is the difference between "is None" and "== None"
我最近遇到了這種語法,我不知道其中的區別。
如果有人能告訴我其中的區別,我將不勝感激。
答案在這里解釋。
報價:
一個類可以自由地以它選擇的任何方式實現比較,並且它可以選擇與 None 進行比較意味着什么(這實際上是有道理的;如果有人告訴你從頭開始實現 None 對象,你還能如何讓它與 True 進行比較反對自己?)。
實際上,由於自定義比較運算符很少見,因此沒有太大區別。 但是您應該使用is None
作為一般規則。
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
在這種情況下,它們是相同的。 None
是一個單例對象(只存在一個None
)。
is
檢查對象是否是同一個對象,而 == 只是檢查它們是否相等。
例如:
p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent
但由於只有一個None
,它們將始終相同,並且is
將返回 True。
p = None
q = None
p is q # True because they are both pointing to the same "None"
這取決於您與 None 比較的是什么。 某些類具有自定義比較方法,將== None
與is None
區別對待。
特別是a == None
的輸出甚至不必是布爾值 !! - 一個常見的錯誤原因。
對於一個特定的例子,采用一個 numpy 數組,其中==
比較是按元素實現的:
import numpy as np
a = np.zeros(3) # now a is array([0., 0., 0.])
a == None #compares elementwise, outputs array([False, False, False]), i.e. not boolean!!!
a is None #compares object to object, outputs False
如果你使用 numpy,
if np.zeros(3)==None: pass
當 numpy 進行元素比較時會給你錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.