为何添加括号会导致Python代码运行结果不同?
Python中链式比较与括号优先级的差异解释
先把问题里的代码整理成可执行形式:
x = 1 L = [1, 2] u = True print(x in L == u) # 输出 False print((x in L) == u) # 输出 True print(x in (L == u)) # 抛出 TypeError
1. 带括号的(x in L) == u
括号的作用是强制改变运算优先级,Python会优先执行括号内的表达式:
- 先计算
x in L:1在列表[1,2]中,结果为True - 再把这个结果和
u(值为True)做相等比较,True == True得到True
2. 不带括号的x in L == u
Python支持链式比较语法——多个比较运算符连用时,会自动拆解成用逻辑与(and)连接的独立比较,这个表达式等价于:
(x in L) and (L == u)
分步计算过程:
x in L结果为TrueL == u是比较列表[1,2]和布尔值True,两者类型和值都不匹配,结果为False- 逻辑与运算
True and False最终得到False
补充:x in (L == u)的报错原因
括号强制先执行L == u,得到结果False;之后尝试执行x in False,但布尔类型不是可迭代对象,Python因此抛出TypeError,提示“布尔类型参数不可迭代”
内容的提问来源于stack exchange,提问作者deep-learnt-nerd
相关产品推荐
相关产品推荐

