簡體   English   中英

“是無”和“==無”有什么區別

[英]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 比較的是什么。 某些類具有自定義比較方法,將== Noneis 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM