Python 中 is 語法帶來的誤解

起步

Python 的成功一個緣由是它的可讀性,代碼清晰易懂,更容易被人類所理解,但有時可讀性會產生誤解。學習

假如要判斷一個變量是否是 17,那能夠:翻譯

if x is 17:

x 是 17 確定是比 x == 17 更加口語化的。code

is的誤解

可是若是你嘗試:對象

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')總結

is not 上的混淆

>>> '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 這門語言的喜好,每一個人都應該好好學習,並當心使用選擇的語言。

相關文章
相關標籤/搜索