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

时间秒杀一切 提交于 2021-02-20 06:42:32

问题


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

回答1:


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).




回答2:


In python, comparisons, memberships tests and identity tests all have the same precedence. The keyword in which checks for membership returns a bool, there is no need for extra compare with a second bool. However, you can group the expressions like so...

y = "33"

("3" in y) == True



来源:https://stackoverflow.com/questions/53412942/why-is-coming-before-in-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!