为什么在Python中'=='要比'in'先执行?

10
以下代码输出False,而根据Python运算顺序,它应该输出True(顺序应为in -> ==,而不是反过来)。为什么==在in之前?
y = "33"
"3" in y == True

输出

False

2
“in”和“==”运算符具有相同的优先级。因此,它们从左到右进行评估。我认为为什么不使用“()”,这样在代码中就清楚了你想要什么呢? (“3”在“33”中)== True - Netwave
13
此外,这是操作符链式调用的一个例子,因为==in都被视为比较运算符。因此,它被计算为('3' in y) and (y == True) - juanpa.arrivillaga
1
此外,您永远不需要与True或False进行比较。如果正确括号化,您的语句将意味着True == True或False == True。 - Michal Polovka
另外,为什么不直接写3 in y呢?没有必要将布尔结果与布尔值进行比较。您可以在此处阅读有关操作符链接的信息 - Maor Refaeli
2个回答

18
现有的回答提供了有用的建议,即不应将布尔值与True进行比较,因为它是多余的。但是,没有一个回答实际回答根本问题:“为什么"3" in y == True的结果为False? ”。
juanpa.arrivillaga在评论中回答了这个问题:
此外,这是运算符链的一个实例,因为==in都被视为比较运算符。因此,它被评估为('3' in y) and (y == True) 在Python中,比较运算符可以链接。例如,如果您想检查abcd是否递增,您可以编写a < b < c < d,而不是a < b and b < c and c < d。同样,您可以使用a == b == c == d来检查它们是否全部相等。
链接比较在Python文档这里中进行了描述:
“比较可以任意链接,例如,x < y <= z等价于x < y and y <= z,只是在后一种情况下仅评估y一次(但在x < y为false时,两种情况下都不评估z)。 ”

-2
在Python中,比较运算符、成员测试和身份测试的优先级相同。 检查成员资格的关键字in返回一个bool值,不需要额外与第二个bool值进行比较。但是,您可以这样对表达式进行分组...

y = "33"

("3" in y) == True


4
这并没有回答"为什么y中的"3" == True的表达式结果为False?"这个问题。 - k_ssb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接