在python中,效率更高:
if a:
if b:
# do something
或
if a and b:
# do something
如果b
为false时未计算a
,则后者效率会更高。但我似乎无法确定Python文档中是否存在这种情况。也许有人可以指点我吗?
答案 0 :(得分:2)
如果Y
为false,Python不会在X and Y
中运行X
。你可以自己尝试一下:
if True and print("Hello1"):
pass
if False and print("Hello2"):
pass # "Hello2" won't be printed
Python做到这一点的原因是它有一种称为短路的东西,可以优化像这样的逻辑表达式。 Python意识到如果X
为假,那么检查Y
是没有意义的,因为无论如何整个表达式都是假的。
您可以使用逻辑运算符的按位版本在Python中绕过它:
and -> &
or -> |
例如:
if True & bool(print("Hello1")):
pass
if False & bool(print("Hello2")):
pass # "Hello2" will be printed this time
但请注意,您需要在print
中包含bool
,因为按位仅适用于相同的数据类型。
我认为性能明智只有一个if语句会更快,因为如果它发现条件为真,其他明智的python可能必须通过2个if语句。
答案 1 :(得分:1)
这称为短路,is mentioned in the docs。
答案是,如果a为False,Python将不会评估b。
答案 2 :(得分:0)
它从左到右进行评估,简单实验
def iftrue1():
print("iftrue1")
return True
def iftrue2():
print("iftrue2")
return True
if iftrue1() and iftrue2():
pass
此输出
iftrue1
iftrue2