链式和条件给出了模糊的结果

时间:2016-05-23 21:56:43

标签: python

有人可以解释以下内容吗?

a = [2,3,4]
b = [5,6,8,9]

print(len(a) > 0)
print(len(b) > 0)
print((len(a) > 0) & len(b) > 0))

输出:

True
True
False

最后一个print语句不应该返回True吗?如果我现在将其重写为:

print((len(a) > 0) & (len(b) > 0))

(注意第二个AND条件周围的括号),我得到输出为True

这令我感到困惑。为什么在括号中包含第二个AND条件会改变结果?

1 个答案:

答案 0 :(得分:7)

&不符合逻辑"和"运营商。它是按位"和"运算符,因此,它优先适用于按位运算而不是逻辑运算。该优先级高于比较的优先级,因此表达式被解析为

((len(a) > 0) & len(b)) > 0

如果您使用逻辑and,则优先级的工作方式符合您的预期:

print(len(a) > 0 and len(b) > 0)