📜  Python中的短路技术

📅  最后修改于: 2020-05-09 11:17:19             🧑  作者: Mango

短路是指如果已经确定了表达式的真值,则布尔运算的执行停止 。 对表达的评估从左到右进行 。 在Python中,各种布尔运算符和函数都支持短路。

布尔运算符中的短路

下表给出了布尔表达式情况下短路的见解。 布尔运算符按优先级升序排列。

or:当Python解释器扫描表达式时,它采用第一条语句并检查其是否为真。 如果第一个语句为true,则Python会返回该对象的值,而不检查第二个语句。 该程序不会打扰第二条语句。 如果第一个值为false,则只有Python会检查第二个值,然后结果基于后一半。

and:对于and表达式,Python使用短路技术检查第一个语句是否为false,然后整个语句必须为false,因此它将返回该值。 仅当第一个值是true时,它才会检查第二条语句并返回该值。
当达到表达式的真值时,包含andor的表达式将停止执行。 评估从左到右进行。

# 演示短路的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
all()和any()短路

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