近期遇到一個 Python 的有趣現象,不知道放在哪好,就寫在這裡吧。
話說一般小弟在寫 Python 的判斷式時,常會把『==』跟『is』混用。
例如:
設定 aa = True
這時判斷式『aa == True』跟『aa is True』,兩者得到的答案都是相同的『True』。
有趣的是,近期小弟寫一個程式從 MySQL 資料庫讀取 bool 值
明明應該為 True 呀,但用 is True 卻得到『False』,搞得最終結果與預想值天差地遠。這倒底是哪裡出了問題呢?
經測試發現:
從 MySQL 資料庫讀取 bool 值,不論是 True 或 False,判斷式用 is 結果都是 False。
要使用『==』符號做判斷,才會得到正確的結果。
會有這種現象的原因是
MySQL 讀取 bool 值時,用 1 表示 True、0 表示 False,並沒有獨立的 True 或 False 值。
而 Python 除了有 True、False 之外。
在使用 == 符號做判斷時,也會把 0 當成 False、把 1 當成 True。
但當使用 is 做判斷時,1 就是 1、True 就是 True,兩個就逕渭分明、決不混淆了。
結論:
Python 從 MySQL 資料庫讀取 bool 值,要寫成判斷式時
應該使用 == 或 != 符號做判斷,不可以用 is 做判斷。