Why does the statement 1 in (1, 2, 3) == True
return False
in Python?
Is the operator priority in Python ambiguous?
Because, per the documentation on operator precedence:
Note that comparisons, membership tests, and identity tests, all have the same precedence and have a left-to-right chaining feature as described in the Comparisons section.
The Comparisons section shows an example of the chaining:
Comparisons can be chained arbitrarily, e.g.,
x < y <= z
is equivalent tox < y and y <= z
So:
1 in (1, 2, 3) == True
is interpreted as:
(1 in (1, 2, 3)) and ((1, 2, 3) == True)
If you override this chaining by adding parentheses, you get the expected behaviour:
>>> (1 in (1, 2, 3)) == True
True
Note that, rather than comparing truthiness by equality to True
or False
, you should just use e.g. if thing:
and if not thing:
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With