逻辑AND的求值顺序(python)
在python中,哪个更有效:逻辑AND的求值顺序(python),python,logical-operators,Python,Logical Operators,在python中,哪个更有效: if a: if b: # do something 或 当a为false时,如果不计算b,则后者将更有效。但我似乎无法确定Python文档中是否存在这种情况。也许有人能给我指一指它?这叫做短路,它是 答案是,如果a为False,Python将不会计算b。这称为短路,它会 答案是,如果a为False,Python将不会计算b。短路 如果X为false,Python不会在X和Y中运行Y。您可以自己尝试一下: if True and prin
if a:
if b:
# do something
或
当
a
为false时,如果不计算b
,则后者将更有效。但我似乎无法确定Python文档中是否存在这种情况。也许有人能给我指一指它?这叫做短路,它是
答案是,如果a为False,Python将不会计算b。这称为短路,它会 答案是,如果a为False,Python将不会计算b。短路 如果
X
为false,Python不会在X和Y
中运行Y
。您可以自己尝试一下:
if True and print("Hello1"):
pass
if False and print("Hello2"):
pass # "Hello2" won't be printed
Python这样做的原因是它有一个叫做短路的东西,它优化了像这样的逻辑表达式。Python意识到,如果X
为false,那么检查Y
就没有意义了,因为整个表达式无论如何都将为false
如何避免短路
在Python中,您可以使用逻辑运算符的按位版本绕过此问题:
and -> &
or -> |
例如:
if True & bool(print("Hello1")):
pass
if False & bool(print("Hello2")):
pass # "Hello2" will be printed this time
但是请注意,您需要在bool
中包装print
,因为按位仅适用于相同的数据类型
演出
我可以想象,在性能方面,只有一条if语句的一条会更快,因为如果其他明智的python发现条件为真,它可能需要执行两条if语句。shortcircuiting
如果X
为false,Python不会在X和Y
中运行Y
。您可以自己尝试一下:
if True and print("Hello1"):
pass
if False and print("Hello2"):
pass # "Hello2" won't be printed
Python这样做的原因是它有一个叫做短路的东西,它优化了像这样的逻辑表达式。Python意识到,如果X
为false,那么检查Y
就没有意义了,因为整个表达式无论如何都将为false
如何避免短路
在Python中,您可以使用逻辑运算符的按位版本绕过此问题:
and -> &
or -> |
例如:
if True & bool(print("Hello1")):
pass
if False & bool(print("Hello2")):
pass # "Hello2" will be printed this time
但是请注意,您需要在bool
中包装print
,因为按位仅适用于相同的数据类型
演出
我可以想象,在性能方面,只有一条if语句的一条会更快,因为如果其他明智的python发现条件为真,它可能需要执行两条if语句。它从左到右进行计算,这是一个简单的实验
def iftrue1():
print("iftrue1")
return True
def iftrue2():
print("iftrue2")
return True
if iftrue1() and iftrue2():
pass
这个输出
iftrue1
iftrue2
它从左到右进行评估,这是一个简单的实验
def iftrue1():
print("iftrue1")
return True
def iftrue2():
print("iftrue2")
return True
if iftrue1() and iftrue2():
pass
这个输出
iftrue1
iftrue2