给定这样的代码:
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
表达式 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
在这种情况下,f(a) 是如何求值的?对所有案例一次还是对每个案例单独一次?
请您参考如下方法:
测试一下:
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
f(a) 将继续进行评估,因为无法保证 f(a) 每次都会返回相同的结果,因此 Python 不会假设它会。您可以使用 result = f(a) 缓存它并使用 result 代替 f(a)。
如果这些 if block 中的任何一个恰好为 True,则不会测试其后的 block 。
