Python解惑:True與False

劉志軍發表於2019-02-28

Python 中常用的資料型別bool(布林)型別的例項物件(值)就兩個,真和假,分別用TrueFalse表示。在if 條件判斷和while 語句中經常用到,不過在Python2.x 中,True 和False 卻有著奇怪的用法,就是真假可以相互被替換,先看下面程式碼:

>>> True
True
>>> False
False
>>> if True:
...     print True
... 
True
>>> if not False:
...     print False
... 
False複製程式碼

這段程式碼邏輯理解起來沒任何問題,if 判斷中只要表示式的值返回 True,就執行if 程式碼塊中的語句。再來看下一段程式碼:

>>> True, False = False, True
>>> True
False
>>> False
True

>>> if not True:
...     print False
... 
True
>>> if False:
...     print True
... 
False
>>>複製程式碼

我把True 和False 互換了一下,就是傳說中的顛倒是非黑白。真變成了假,假變成了真。於是在條件判斷中,表示式的值返回False才執行程式碼塊中的語句。究竟是什麼原因呢?

解惑

在Python2.7 中,TrueFalse是兩個內建(built-in)變數,內建變數和普通自定義的變數如a, b, c一樣可以被重新賦值,因此我們可以把這兩個變數進行任意的賦值,比如:

True = 2
False = "abc"複製程式碼

甚至是True和False進行互換

tmp = True
True = False
False = tmp複製程式碼

互換後變數True指向了物件,False指向了物件:

Python解惑:True與False
false-true.png

因此,在Python 中我們不要隨意給True 和False 賦新的值,否則程式程式碼邏輯都會亂套了。這也算是Python2.x 中一個坑,不過在Python3.x 中,終於把這個兩變數變成了關鍵字,也就是說,程式設計師再也沒法給這兩變數賦新的值了,從此True永遠指向物件,False指向物件,永不分離。用keyword模組檢測True 和False 是否為關鍵字。

>>> import keyword
>>> keyword.iskeyword(`True`)
False複製程式碼

我的部落格:foofish.net

掃一掃關注公眾號獲取最新文章:

Python解惑:True與False

相關文章