Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is the boolean expression "1 in (1, 2, 3) == True" False? [duplicate]

Why does the statement 1 in (1, 2, 3) == True return False in Python? Is the operator priority in Python ambiguous?

like image 883
IntelliMoonSpirit Avatar asked Dec 10 '16 12:12

IntelliMoonSpirit


1 Answers

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 to x < 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:.

like image 62
jonrsharpe Avatar answered Sep 20 '22 15:09

jonrsharpe