在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()都相當於False ,即:
not None == not False == not '' == not 0 == not [] == not {} == not ()
if條件語句后面需要跟隨bool類型的數據,即True或者False。然而,如果不是bool類型的數據,可以將其轉換成bool類型的數據,轉換的過程是隱式的。
在Python中,None、空列表[]、空字典{}、空元組()、0等一系列代表空和無的對象會被轉換成False。除此之外的其它對象都會被轉化成True。
在命令if not 1中,1便會轉換為bool類型的True。not是邏輯運算符非,not 1則恆為False。因此if語句if not 1之下的語句,永遠不會執行。
也許你是想判斷x是否為None,但是卻把`x==[]`的情況也判斷進來了,此種情況下將無法區分。
對於習慣於使用if not x這種寫法的pythoner,必須清楚x等於None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()時對你的判斷沒有影響才行。
而對於`if x is not None`和`if not x is None`寫法,很明顯前者更清晰,而后者有可能使讀者誤解為`if (not x) is None`,因此推薦前者,同時這也是谷歌推薦的風格
結論:
`if x is not None`是最好的寫法,清晰,不會出現錯誤,以后堅持使用這種寫法。
使用if not x這種寫法的前提是:必須清楚x等於None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元組()時對你的判斷沒有影響才行。