你不容錯過 Python判斷是空的例項

2021-10-07 20:42:19 字數 2161 閱讀 3660

在實際的工作當中,我們難免要與空值打交道,相信不少初學者都會寫出下面的**:

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...