google 的 python 风格指南中这么说:
Beware of writing
if x:
when you really meanif x is not None:
—e.g., when testing whether a variable or argument that defaults to None was set to some other value. The other value might be a value that's false in a boolean context!
也就是说,推荐使用 if x is not None
进行判断,but why?
內容和標題不符,
if x
和if not x is None
是不一樣的。if x
會對x做 __nonzero__ 判斷,當 x 為 ''(空字串),{}(空字典), 0 的時候都是 False。當你確實要判斷一個變數不是 None 的時候,應該用if x is not None
。至於
if not x is None
和if x is not None
是一樣的,選一個你讀的順的就好。前者比較接近白話文,而後者則有可能使讀者誤解為
if (not x) is None
.首先,直接查看操作碼(XP+Python3.4)。
x is not None
的操作碼:if not x is None
的操作碼:可以看到,操作碼是一樣的!
題主也可以測試後面加or或and的情況。
個人意見,
if x is not None
比if not x is None
更易讀,畢竟英文當中有一個 isn't 呢。if not x is None
和if x is not None
對電腦而言是一樣的。對人類而言是不一樣的。前者的隱含意義是x本來是None結果不是,後者是x不該是None結果也不是。個人感覺,無客觀依據(好像沒有人做這樣的心理實驗?)。
前者更pythonic
假如原本你的
x
為None
你要執行以下程式碼判斷
x
是否已經改變,仍為None
?你得到會是
no
,其實x
已經被改變了,但還是False
if not x is None
和if x is not None
結果是一樣的。if not x is None
=>if not (x is None)
if x is not None
=>if x (is not) None