Why is ‘==‘ coming before ‘in’ in Python?

• A+
Category：Languages

The following code outputs False, when according to the Python Order of Operations it should output True (the order should be in -> ==, not the other way around). Why is == coming before in?

y = "33" "3" in y == True

Output

False

The existing answers give helpful advice that you shouldn't compare booleans to True because it's redundant. However, none of the answers actually answer the root question: "why does "3" in y == True evaluate to False?".

That question was answered in a comment by juanpa.arrivillaga:

Also, this is an instance of operator chaining, since == and in both count as comparison operators. So this is evaluated as ('3' in y) and (y == True)

In Python, comparison operators can be chained. For example, if you want to check that a, b, c, and d are increasing, you can write a < b < c < d instead of a < b and b < c and c < d. Similarly, you can check that they are all equal with a == b == c == d.

Chained comparisons are described in the Python documentation here:

Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false).