一、运算符的优先级
首先逻辑运算分优先级:not > and > or
例如:
print(True or False and True) # True and True ==> True
print(False or not False) # False or True ==> True
print(True or True and False) # True or True ==> True
强烈建议:在开发中,要使用括号来说明运算符的优先级,例如:
print(True or True and False) # True
print(True or(True and False))
在python语言中,逻辑运算符也有规则:
(1) 逻辑与运算,只要有一个运算数是False,结果就是False;只有所有的运算数都是True,结果才是True。
(2) 短路 :只要遇到了False,就停止执行,不再继续执行。
(3) 取值 :取第一个为False,如果所有的运算数都是True,则取最后一个运算数。
二、逻辑运算的短路
(1) 逻辑与运算,只有所有的运算数都是True,结果才是True。
(2) 只要有一个运算数是False,结果就是False。
例如:
4 > 3 and print('hello world')
4 < 3 and print('你好世界') # 逻辑与运算的短路问题
(3)逻辑或运算,只有所有的运算数都是False,结果才是False。
(4)只要有一个运算数是True,结果就是True。
(5)逻辑运算的结果,一定是布尔值吗?答:不一定
(6)逻辑与运算做取值时,取第一个为False的值;如果所有的运算数都是True,取最后一个值。
例如:
print(3 and 5 and 0 and 'hello') # 0
print('good' and 'yes' and 'ok' and 100) # 100
(7) 逻辑或运算做取值时,取第一个为True的值;如果所有的运算数都是False,取最后一个值。
例如:
print(0 or 'lisi' or 5 or 'ok') # lisi
print(o or [] or {} or ()) # ()
三、位运算(了解即可)
位运算有以下:
# 按位与& 按位或| 按位异或 按位左移<< 按位右移>> 按位取反 ~
a = 23
b = 12
print(a & b) # 按位与 :同为1 则为1,否则为0
print(a | b) # 按位或 :只要有一个为1,就为1
print(a ^ b) # 按位异或 :相同为0,不同为1
x = 5
print(x << 3) # a << n ==> a * 2 的n次方法 -- 5*2的3次方