なぜ(1 == 2 != 3)
はPythonでFalse
と評価されますが、((1 == 2) != 3)
と(1 == (2 != 3))
はともにTrue
と評価されますか?Pythonで(1 == 2!= 3)がFalseに評価されるのはなぜですか?
ここではどの演算子優先順位が使用されていますか?
なぜ(1 == 2 != 3)
はPythonでFalse
と評価されますが、((1 == 2) != 3)
と(1 == (2 != 3))
はともにTrue
と評価されますか?Pythonで(1 == 2!= 3)がFalseに評価されるのはなぜですか?
ここではどの演算子優先順位が使用されていますか?
これは演算子chaining phenomenon
によるものです。 Pydocのようにそれを説明する:例えば、
比較は任意に連鎖することができ、そのYが一度だけ評価されている以外は、X < Y < = Zは、 < X にYおよびY < = Z等価であります(ただし、 の場合、x <が偽であると判断された場合、zはまったく評価されません)。
そして、あなたは==
と!=
事業者のprecedenceを見れば、あなたは彼らが同じ優先順位ので、連鎖現象に適用さを持っていることがわかります。
だから基本的に何が起こる:
>>> 1==2
=> False
>>> 2!=3
=> True
>>> (1==2) and (2!=3)
# False and True
=> False
Aはop
は比較演算子ですA op B op C
のような表現をチェーン(https://docs.python.org/2.3/ref/comparisons.html)として評価Cとは対照的である:
A op B and B op C
をこのように、あなたの例が評価されますas
1 == 2 and 2 != 3
となり、結果はFalse
になります。