|和&可以用于bool类型,也可以用于数值运算。与and和or运算符一样。
数值计算:
|和&实质就是两个数二进制的或和与运算,最后得到十进制数。
and用于数值计算:如果出现0结果为0,两个非零时结果为第二个数。
or用于数值计算:至少有一个非零数时,结果为第一个非零数,如果两个数都为0,则结果为0。
条件判断:
|和&:两边可以是True和False的式子,最后得相应结果。
例如:
print(True|False) #True
当使用条件运算时这里需要注意,上诉说过,它们实际是位运算,这里注意:|和&的优先级高于==、!=、>=等条件运算符。
例如:
print(((1==1)|(2==1))&(3==3)) #True
print((1==1|2==1)&3==3) #False
print(1==1 & 2==2) #False
拿第三个式子来说,看似最后结果为True&True=True,但是因为&优先级更高,所以先运算1&2=0,然后是1==0==2,对于多个连续==符号来说,只有这些数全部相等才会得到True,否则False。可以做这样的示例,将第三个式子最后一个2改为0:
print(1==1 & 2==0) #False
print(False==0) #True
结果任然为False,说明上式中不是按照从左到右的顺序依次计算==运算。至于为什么布尔类型可以用|和&运算,这个估计是内部进行了支持。
所以综上,在使用条件判断时,最好使用and和or,不要混淆。