「
is
和
None
區(qū)別在哪里」
-
is比較的是對(duì)象標(biāo)識(shí)符,用來(lái)檢查對(duì)象的標(biāo)識(shí)符是否一致,即兩個(gè)對(duì)象在內(nèi)存中的地址是否一致。在使用a is b的時(shí)候,相當(dāng)于是做id(a)==id(b)判斷。 -
==比較兩個(gè)對(duì)象的值是否相等,相當(dāng)于調(diào)用__eq__()方法,即a==b等同于a.__eq__(b)。
「進(jìn)行
None
判斷時(shí),為什么用
is
」
▍這在
PEP8
中有所規(guī)定
"Comparisons to singletons like None should always be done with 'is' or 'is not', never the equality operators."
--- From PEP8
▍為什么會(huì)有這樣的規(guī)定
如上所述None在Python里是個(gè)
單例對(duì)象
,一個(gè)變量如果是None,它一定和None指向同一個(gè)內(nèi)存地址。None是python中的一個(gè)特殊的常量,表示一個(gè)空的對(duì)象。空值是Python中的一個(gè)特殊值,
數(shù)據(jù)為空并不代表是空對(duì)象
,例如
[],'',(),{}
等都不是None。
a = None
b = None
print(id(a) == id(b)) # True
print([] is None) # False
print('' is None) # False
None和任何對(duì)象比較返回值都是False,除了自己。
==None
背后調(diào)用的
__eq__()
,而
__eq__()
可以被重載,e.g.
class test():
def __eq__(self, other):
return True
t = test()
print(t is None) # False
print(t == None) # True
雖然很多時(shí)候用
==None
會(huì)得到我們內(nèi)心想要的結(jié)果,但是如果一個(gè)對(duì)象的
__eq__()
方法被重載,
==
操作可能會(huì)影響結(jié)果的判斷。對(duì)了,像PyCharm這樣的IDE一般會(huì)提示
==None
不符合PEP8規(guī)范,不知大家注意過(guò)沒有。
另外從代碼執(zhí)行效率上來(lái)看,
is
is a LOT faster than
==
。
以上!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

