有人可以解释以下内容吗?
a = [2,3,4]
b = [5,6,8,9]
print(len(a) > 0)
print(len(b) > 0)
print((len(a) > 0) & len(b) > 0))
Run Code Online (Sandbox Code Playgroud)
输出:
True
True
False
Run Code Online (Sandbox Code Playgroud)
最后一个print语句不应该返回True吗?如果我现在重写为:
print((len(a) > 0) & (len(b) > 0))
Run Code Online (Sandbox Code Playgroud)
(注意第二个AND条件周围的括号),我得到输出为True.
这让我感到困惑.为什么在括号中包含第二个AND条件会改变结果?
&不是逻辑"和"运算符.它是按位"和"运算符,因此,它优先适用于按位运算而不是逻辑运算.该优先级高于比较的优先级,因此表达式被解析为
((len(a) > 0) & len(b)) > 0
Run Code Online (Sandbox Code Playgroud)
如果使用逻辑and,则优先级按预期方式工作:
print(len(a) > 0 and len(b) > 0)
Run Code Online (Sandbox Code Playgroud)