Python 的成功一個緣由是它的可讀性,代碼清晰易懂,更容易被人類所理解,但有時可讀性會產生誤解。學習
假如要判斷一個變量是否是 17,那能夠:翻譯
if x is 17:
x 是 17
確定是比 x == 17
更加口語化的。code
可是若是你嘗試:對象
if name is "weapon":
這個判斷不見得管用。is
用來檢查左側和右側是不是徹底相同的對象。若是有兩個不一樣的字符串對象,每一個對象的值是相同的,應該使用 ==
來判斷,由於 is 的用法與口語上的區別挺大的:字符串
if 999 + 1 is 1000: # False
正由於這樣的誤解,在 if
判斷條件上容易讓初學者掉坑:變量
answer = 'yes' if answer is 'y' or 'yes':
你會發現無論變量是什麼值,判斷都是爲真。由於 is
的優先級高,至關於 if (answer is 'y') or ('yes')
。方法
正確的方法應該是 if answer == 'y' or answer == 'yes'
或者 if answer in ('y', 'yes')
。總結
>>> 'something' is not None True >>> 'something' is (not None) False
is not
是一個二元運算符,應該視爲一個總體,不要由於中間空格而當成兩個詞。底層上,它們也是一個操做符,CPython 將 s is not None
翻譯成的字節碼爲:語言
6 LOAD_NAME 0 (s) 8 LOAD_CONST 1 (None) 10 COMPARE_OP 9 (is not)
is not
是對 is
相對應的操做符。也能夠視爲是將 is 判斷的結果再進行取反。co
我贊成 Python 很是易讀。每種語言的結構都存在一些「出乎意料」的使用。這並不影響我對 Python 這門語言的喜好,每一個人都應該好好學習,並當心使用選擇的語言。