or、and表达式(短路逻辑)
and和or的含义
假设a为真命题,b为假命题,那“a与b”是假命题,“a或b”为真命题
运算符 | 含义 | 逻辑表达式 | 说明 |
---|---|---|---|
and | 与运算 | a and b | 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。 |
or | 或运算 | a or b | 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。 |
/*
在and运算中:
一个为假,那整个运算肯定都为假,无论b是真还是假,都不会影响最终的结果,所以直接返回a的值,
如果为真,那后面的b不知是真还是假,所以要继续运算,则返回b的值。
*/
/*
在或运算中,只要有一个为真,那整个运算都为真,所以只要a为真,那不管b是真还是假,最终的结果都是真,所以返回a的值。
反之。
*/
运算符 | 含义 | 逻辑表达式 | 说明 |
---|---|---|---|
and | 与运算 | a and b | 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。 |
or | 或运算 | a or b | 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。 |
短路逻辑定义
所谓短路:即后续代码不再执行
若and左侧的表达式为false,则短路之后所有的and表达式,直到出现or,则返回and左侧表达式的值继续与or的右侧参与运算。 此时若,or左侧的表达式为true,则短路之后所有的表达式,不管是or还是and,直接输出or左侧表达式的值。 此时若,or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。
# 短路
def a():
print("a")
return 0
def b():
print("b")
return 1
def c():
print("c")
return 2
def d():
print("d")
return 3
def e():
print("e")
return 0
def f():
print("f")
return 4
def g():
print("g")
return 0
def h():
print("h")
return 5
#因为a为0,所以 b() and c()则不会执行,0and d函数返回3,3后面是or,所以满足“or左侧的表达式为true,则短路之后所有的表达式,不管是or还是and”
result = a() and b() and c() or d() or e() and g() or h() # 执行a、d两个函数
print(result) # 3
# 不短路
def a():
print("a")
return 0
def b():
print("b")
return 1
def c():
print("c")
return 2
def d():
print("d")
return 0
def e():
print("e")
return 0
def f():
print("f")
return 4
def g():
print("g")
return 0
def h():
print("h")
return 5
# 因为0 or d(),满足"or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑",所以后面的要继续执行
result = a() and b() and c() or d() or e() and g() or h() # 执行a、d、e、h函数
print(result) # 5