在Python中,你可能會發現這樣一個奇怪的現象:
>>> 2 == 2 > 1
True
>>> (2 == 2) > 1
False
>>> 2 == (2 > 1)
False
為什麼會出現
2==2>1
的結果為True?如果說這是運算符的優先級問題,那麼後兩個式子為什麼又都是False?
實際上這涉及到了Python的
鍊式對比(ChainedComparisons)
。在其他語言中,有一個變量
x
,如果要判斷x是否大于1,小于5,可能需要這樣寫代碼:
if (x > 1 and x < 5)
但是在Python中,可以這樣寫代碼:
if 1 < x < 5
Python能夠正确處理這個鍊式對比的邏輯。回到最開始的問題上,
==
等于符号和
<
小于符号,本質沒有什麼差別。是以實際上
2==2>1
也是一個鍊式對比的式子,它相當于
2==2and2>1
。此時,這個式子就等價于
True and True
。是以傳回的結果為True。
關于鍊式對比,可以看官方文檔:https://docs.python.org/3/reference/expressions.html#comparisons