在實際的工作當中,我們難免要與空值打交道,相信不少初學者都會寫出下面的**:
if a is none:
do something.else:
do the other thing.
這樣寫看起來不錯,但實際上會有問題。一般來講,python中會把下面幾種情況當做空值來處理:
none
false
0,0.0,0l
'',(),,{}
其中none的特殊之處在於,它既不是數值0,也不是某個資料結構的空值,它本身就是乙個空值物件。它的型別是nonetype,它遵循單例模式,也就是說,在同一命名空間下的所有none其實質上都是同乙個空值物件。
>>> id(none)
1795884240
>>> none == 0
false
>>> none == ''
false
>>> a = none
>>> id(a)
1795884240
>>> a == none
true
上面的判斷顯然不符合我們的期望:只有當a被顯示賦值為none的情況下,a==none才為true。
那麼,對於python中更為廣義的none值判斷,我們應該怎麼做呢?
>>> a = '' #這裡僅以空字串為例,其他空值同樣適用
>>> if a:
... print 'a is not empty'
... else:
... print 'a is a empty string'
'a is a empty string.'
可以看出,if a的判斷方式得出了我們想要的結果,那麼if a的判斷方式究竟是乙個怎樣的過程呢?
if a會首先去呼叫a的__nonzero__()去判斷a是否為空,並返回true/false,若乙個物件沒有定義__nonzero__(),就去呼叫它的__len__()來
進行判斷(這裡返回值為0代表空),若某一物件沒有定義以上兩種方法,則if a的結果永遠為true
接下來驗證一下上面的說法:
>>>class a(object):
... def __nonzero__(self):
... print 'running on the __nonzero__'
... return true
>>>class b(object):
... def __len__(self):
... print 'running on the __len__'
... return false
>>> a, b = a(), b()
>>>if a:
... print 'yep'
... else:
... print 'nop'
running on the __nonzero__
yep>>>if b:
... print 'yep'
... else:
... print 'nop'
running on the __len__
nop
內容擴充套件:
如何判斷python函式返回的是否是空
我不知道你這裡的空是什bai麼意思 是none還是『』
我都都給你du講講:
none是一zhi個空dao的物件,代表什麼都沒有。
而』』,是乙個字串物件,代表乙個空的字串
如果返回值是none,你就用 if none:判斷
如果返回『』,你就用if len(『』) == 0:判斷
可以直接bai把函式放到if後面當du作條件,如果為空的話zhi判斷結果dao是false,例如:
def test():
return none
if test():
print true
else:
print false
機會絕不容錯過
機會絕不容錯過 度過完漫長國慶長假,一切都恢復往常一樣,上班 下班 回家溫網成了新一代人的生活規律。在浩大的網路裡如何找到屬於自己的角落呢?夢之城集合了虛擬社群 qq空間 部落格等各種網路交流平台的優點,甚至開創了屬於會員自己的 如何 做網路第一 手,那是一展才能的好機會。現在入住夢之城,還有捉蟲活...
那些經典不容錯過的520笑話
那些經典不容錯過的520笑話 噴飯網以最專業的眼光,最專注的態度,廣泛地收集內容,並客觀地挑選出各類笑話的精品奉獻給大家。噴飯網免費為廣大網民提供最方便快捷的服務。不僅只有笑話,中還包含搞笑 笑話故事 搞笑漫畫 腦筋急轉彎等能使人娛樂的資訊。1.乙個年輕人去廟裡問禪師 2015.5.20這天應該怎麼...
不容錯過的git各階段撤銷總結
git checkout 檔名稱 git reset head 檔名稱 git checkout 檔名稱 git log檢視提交的日誌,然後找到想要回到的地方 例如 只是不想要剛剛的這個提交,那麼找到剛剛的這個提交的上乙個提交,然後複製他的commitid,複製前幾位就行 git reset har...