注: 運(yùn)行環(huán)境:python3.6.6稻励,win10,64位
1. None
None是python中的一個(gè)特殊的常量愈涩,表示一個(gè)空的對(duì)象望抽,空值是python中的一個(gè)特殊值。數(shù)據(jù)為空并不代表是空對(duì)象履婉,例如[],''等都不是None煤篙。None和任何對(duì)象比較返回值都是False,除了自己毁腿。
>>> L=[]
>>> L is None
False
>>> L=''
>>> L is None
False
None有自己的數(shù)據(jù)類型NontType辑奈,你可以將None賦值給任意對(duì)象,但是不能創(chuàng)建一個(gè)NoneType對(duì)象已烤。
>>> type(None)
<class 'NoneType'>
>>> n=NoneType()
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'NoneType' is not defined
2.False
需要注意一點(diǎn):
>>> a=False
>>> not a
True
python中數(shù)據(jù)為空的對(duì)象在判斷時(shí)的結(jié)果都為False鸠窗,其中None,F(xiàn)alse草戈,0塌鸯,[],""唐片,{}丙猬,()都相當(dāng)于False,即not None == not False == not '' == not 0 == not [] == not {} == not ()
费韭。
3. is 和 ==
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)
。
4. Python里和None比較時(shí)逻翁,為什么是 is None 而不是 == None
因?yàn)镹one在Python里是個(gè)單例對(duì)象饥努,一個(gè)變量如果是None,它一定和None指向同一個(gè)內(nèi)存地址八回。
>>> a=None
>>> b=None
>>> id(a)==id(b)
True
is None是判斷兩個(gè)對(duì)象在內(nèi)存中的地址是否一致酷愧,== None背后調(diào)用的是eq驾诈,而eq可以被重載,下面是一個(gè) is not None但 == None的例子:
>>> class test():
... def __eq__(self,other):
... return True
...
>>> t=test()
>>> t is None
False
>>> t == None
True