if ifif语句中的表达式评估

MLi*_*ter 1 python

给出这样的代码:

if f(a) == 1:
    # do sth A
elif f(a) == 2:
    # do sth B
elif f(a) == 3:
    # do sth C
else:
    # do sth D
Run Code Online (Sandbox Code Playgroud)

表达式f(a)只执行/评估一次吗?或者它得到执行/评估的每一种情况下if还是elif?此外,复合语句是否有所不同:例如

if f(a) == 1:
    # do sth A
elif f(a) == 2 and a > 0:
    # do sth B
elif f(a) == 3 and a < 0:
    # do sth C
else:
    # do sth D
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何f(a)评估?每个案例一次性或单独一次?

Ble*_*der 5

测试出来:

In [7]: %paste
def f(a):
    print(a)

a = 4

if f(a) == 1:
    pass
elif f(a) == 2:
    pass
elif f(a) == 3:
    pass
else:
    pass

## -- End pasted text --
4
4
4
Run Code Online (Sandbox Code Playgroud)

f(a)将继续得到评估,因为不能保证f(a)每次都会返回相同的结果,因此Python不会假设它会.您可以result = f(a)使用它来缓存它并result代替它f(a).

如果这些if块中的任何一个恰好是True,那么之后的块将不会被测试.