逻辑运算
Python中用and, or, not 表示逻辑与,或,非。 其中and返回最后,或者导致短路的操作数;or返回第一真值或者最后的操作数
In [89]: 1 and 2 # 最后的操作数
Out[89]: 2
In [90]: 1 and 0 and 2 # 导致短路的操作数
Out[90]: 0
In [91]: 1 or 0 # 第一真值
Out[91]: 1
In [92]: 0 or 1 or 2 # 第一真值
Out[92]: 1
In [94]: False or 0 or 9 # 第一真值也是最后的操作数
Out[94]: 9
Python中的True和False
在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了 __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,则其实例也被当作False,其他对象均为True。
当只有一个运算符时:
True and True ==> True True or True ==> True
True and False ==> False True or False ==> True
False and True ==> False False or True ==> True
False and False ==> False False or False ==> False
短路逻辑
- 表达式从左至右运算,若or的左侧逻辑值为True,则短路or后所有的表达式(不管是and 还是or),直接输出or左侧表达式 。
- 表达式从左至右运算,若and的左侧逻辑值为False,则短路其后所有and表达式,直到有or 出现,输出and左侧表达式到or的左侧,参与接下来的逻辑运算。
- 若or的左侧为False,或者and的左侧为True则不能使用短路逻辑。
举个栗子:
def a():
print("a is true")
return True
def b():
print("b is true")
return True
def c():
print("c is false")
return False
def d():
print("d is false")
return False
print(a() and b() and c() and d())
print("*"*20)
print(a() or b() or c() or d())
print("*"*20)
print(a() and d() and c() and b())
执行结果:
a is true
b is true
c is false
False
********************
a is true
True
********************
a is true
d is false
False