Python邏輯判斷要用「is」還是「==」
標準答案是用「is」
如果是兩個布林數要比較,就用「is」,例如
a is b
(i > 0) is True
讀者最關心的應該是這個吧,若是不想探究原因的話,可以把此網頁關掉回去寫程式了。
什麼是「is」
「is」條件成立,代表左右兩端是同一樣東西,而「==」條件成立,左右兩端的值一樣就好。
舉個例子,變數的值一樣,但是代表不同東西:
Python中None、True、False這幾個值都是固定且唯一,「固定」代表值永遠不變,「唯一」代表程式中的None都是同一個東西,True、False也是如此,用is會是最適合的
舉個例子,變數的值一樣,但是代表不同東西:
a = [1]
b = [1]
print(a == b) # True
print(a is b) # False
b[0] = 2
print(a) # [1]
print(b) # [2]
另一個例子,兩個變數代表同一個東西,當然,它們的值也會相同:
a = [1]
b = a
print(a == b) # True
print(a is b) # True
b[0] = 2
print(a) # [2]
print(b) # [2]
當a is b條件成立時,b有變動,a會跟著變,反之亦然,因為它們是代表同一個東西。Python中None、True、False這幾個值都是固定且唯一,「固定」代表值永遠不變,「唯一」代表程式中的None都是同一個東西,True、False也是如此,用is會是最適合的
a is None
a is True
a is False
用「==」跟用「is」結果一樣嗎
了解「is」與「==」的不同後,是不是覺得用「==」跟用「is」結果可能會不一樣,可是先前的程式通篇用「==」也是跑得很正常?
先來看True和False是什麼
先來看True和False是什麼
print(int(True)) # 1
print(int(False)) # 0
在「==」的判斷中,True和False的值會是1和0,現在可以展示「==」與「is」會有不一樣的結果:
print(1 == True) # True
print(0 == False) # True
print(1 is True) # False
print(0 is False) # False
好的,我明白各位讀者的程式中,不會有整數和布林數比較條件的寫法,所以通篇用「==」也是跑得會跟預期一樣,但別放棄把你的程式改回「is」,因為用「==」電腦還要去計算兩端的值,理論上「is」判斷會執行得比較快,雖然選用python開發,應該不會在意這一點點的時間差,但「is」在語意表達上更為嚴謹,又快又準的寫法,還是建議大家使用。
留言
張貼留言