Python 中常用的資料型別bool
(布林)型別的例項物件(值)就兩個,真和假,分別用True
和False
表示。在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 中,True
和False
是兩個內建(built-in)變數,內建變數和普通自定義的變數如a, b, c一樣可以被重新賦值,因此我們可以把這兩個變數進行任意的賦值,比如:
True = 2
False = "abc"複製程式碼
甚至是True和False進行互換
tmp = True
True = False
False = tmp複製程式碼
互換後變數True
指向了假
物件,False
指向了真
物件:
因此,在Python 中我們不要隨意給True 和False 賦新的值,否則程式程式碼邏輯都會亂套了。這也算是Python2.x 中一個坑,不過在Python3.x 中,終於把這個兩變數變成了關鍵字,也就是說,程式設計師再也沒法給這兩變數賦新的值了,從此True
永遠指向真
物件,False
指向假
物件,永不分離。用keyword
模組檢測True 和False 是否為關鍵字。
>>> import keyword
>>> keyword.iskeyword(`True`)
False複製程式碼
我的部落格:foofish.net
掃一掃關注公眾號獲取最新文章: