📅  最后修改于: 2020-05-09 11:17:19             🧑  作者: Mango
短路是指如果已经确定了表达式的真值,则布尔运算的执行将停止 。 对表达的评估从左到右进行 。 在Python中,各种布尔运算符和函数都支持短路。
下表给出了布尔表达式情况下短路的见解。 布尔运算符按优先级升序排列。
or:当Python解释器扫描或表达式时,它采用第一条语句并检查其是否为真。 如果第一个语句为true,则Python会返回该对象的值,而不检查第二个语句。 该程序不会打扰第二条语句。 如果第一个值为false,则只有Python会检查第二个值,然后结果基于后一半。
and:对于and表达式,Python使用短路技术检查第一个语句是否为false,然后整个语句必须为false,因此它将返回该值。 仅当第一个值是true时,它才会检查第二条语句并返回该值。
当达到表达式的真值时,包含and和or的表达式将停止执行。 评估从左到右进行。
# 演示短路的Python代码
# 使用 and 、or
# helper 函数
def check():
return "芒果"
# 使用表达式演示打印“芒果",并执行,因为两者都需要检查真值
print ( 1 and check())
# 仅当第一个值为true或不需要调用check()时,才使用表达式打印1
print ( 1 or check())
# 使用表达式演示打印“芒果"时,遇到校验时该值返回true, 1未执行
print ( 0 or check() or 1 )
# 使用表达式来演示将打印1作为最后一个值来评估完整表达式,因为“and"
print ( 0 or check() and 1 )
输出:
芒果
1
芒果
1
Python中的内建函数all()和any()也支持短路。 下面的示例可以使您清楚地了解其工作原理。
# Python代码演示短路
# 使用 all() , any()
# helper函数
def check(i):
print ( "芒果" )
return i
# 使用all()会在发生false时停止执行,这告诉编译器即使一个为false,也不能全部为true,因此可以进一步停止执行.
# prints 3 "芒果"
print ( all (check(i) [ , 3 ])) i (check(i) ]))
print ( "\r" )
# 当true发生时,使用any()停止执行将告诉编译器即使一个为true,表达式也为true,因此进一步停止执行.
# prints 4 "芒果"
print ( any (check(i) [ (check(i) for i (check(i) ]))
输出:
芒果
芒果
芒果
False
芒果
芒果
芒果
芒果
True
条件运算符也会跟随短路,因为当获得表达式结果时,不需要进一步执行。
# 使用条件运算符辅助函数演示短路的Python代码
def check(i):
print ("芒果")
return i
# 使用条件表达式,因为10不大于11,因此不会执行进一步的操作来检查真值.
print( 10 > 11 > check(3) )
print ("\r")
# 因为11大于10,所以使用条件表达式进行进一步执行以检查真值。11> 3返回true
print( 10 < 11 > check(3) )
print ("\r")
# 因为11大于10,所以使用条件表达式进行进一步执行以检查真值。如果11 <12返回false
print( 10 < 11 > check(12) )
输出:
False
芒果
True
芒果
False