在實際的工作當中,我們難免要與空值打交道,相信不少初學者都會寫出下面的**:
if a is none:
do something.else:
do the other thing.
這樣寫看起來不錯,但實際上會有問題。一般來講,python中會把下面幾種情況當做空值來處理:
none
false
0,0.0,0l
'',(),,{}
其中none的特殊之處在於,它既不是數值0,也不是某個資料結構的空值,它本身就是乙個空值物件。它的型別是nonetype,它遵循單
例模式,也就是說,在同一命名空間下的所有none其實質上都是同乙個空值物件。
>>> id(nosjakpnlpkpne)
1795884240
>>> none == 0
false
>>>&nbssjakpnlpkpp;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 =&nbsjakpnlpkpsp;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():www.cppcns.com
print true
else:
print false
你不容錯過 Python判斷是空的例項
在實際的工作當中,我們難免要與空值打交道,相信不少初學者都會寫出下面的 if a is none do something.else do the other thing.這樣寫看起來不錯,但實際上會有問題。一般來講,python中會把下面幾種情況當做空值來處理 none false 0,0.0,0...
判斷是空物件還是空陣列
方法一 利用josn.stringify if json.stringify res.data else方法二objeck.keys objeck.keys 方法會返回乙個由給定物件的自身可列舉屬性組成的陣列,陣列中屬性名的排列順序和使用 for in 迴圈遍歷該物件時返回的順序一致,該方法屬於 e...
python例項(判斷)
題目 輸入某年某月某日,判斷這一天是這一年的第幾天?coding utf 8 year int raw input 請輸入年份 month int raw input 請輸入月份 day int raw input 請輸入天 month1 0 31 60 91 121 152 182 213 244...