Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
逻辑AND的求值顺序(python)_Python_Logical Operators - Fatal编程技术网

逻辑AND的求值顺序(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

在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 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