python中&与and的问题


今天敲代码发现个奇怪的问题:

a = 1
b = 2

print(a == 1 & b == 2)  # False
print((a == 1) & (b == 2))  # True
print(a == 1 and b == 2)  # True
print((a == 1) and (b == 2))  # True

查了下发现:

& : 按位与运算符,把数字当作二进制来看,参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

and: 布尔"与" - 如果 x 或y为 False,x and y 返回 False

运算符优先级(自上而下,优先级提高):

运算符 描述
lambda Lambda表达式
or 布尔“或”
and 布尔“与”
not x 布尔“非”
in,not in 成员测试
is,is not 同一性测试
<,<=,>,>=,!=,== 比较
| 按位或
^ 按位异或
& 按位与
<<,>> 移位
+,- 加法与减法
*,/,% 乘法、除法与取余
+x,-x 正负号
~x 按位翻转
** 指数
x.attribute 属性参考
x[index] 下标
x[index:index] 寻址段
f(arguments...) 函数调用
(experession,...) 绑定或元组显示
[expression,...] 列表显示
{key:datum,...} 字典显示
'expression,...' 字符串转换
可见&优先级比判断优先级==高,式子(a == 1 & b == 2)中,先计算1 & b 为False,再计算a == False 为False,再计算False == 2为False。

猜你喜欢

转载自blog.csdn.net/cherry_yu08/article/details/80092532