下面两段代码在功能上有区别吗?我主要关心调用函数的顺序。函数是否在第一个 if 语句中按顺序执行?
首先,
if func1() and func2() and func3() and func4():
do stuff
其次,
if func1():
if func2():
if func3():
if func4():
do stuff
请您参考如下方法:
是的,Python 从左到右计算表达式。这些函数将以相同的顺序调用。来自reference documentation :
Python evaluates expressions from left to right.
此外,如果 func1() 返回假值,则不会调用 func2(),无论是在使用 and 还是在嵌套 if 表达式。引用 boolean operations documentation :
The expression
x and yfirst evaluatesx; ifxis false, its value is returned; otherwise,yis evaluated and the resulting value is returned.
因为在表达式 func1() 和 func2() 中,如果 func1() 返回 false,则不会对 func2() 求值值,func2() 根本没有被调用。
您可以在这里使用第三种选择,使用 all() function :
functions = (func1, func2, func3, func4)
if all(f() for f in functions):
只要前面的函数返回真值,它就会再次调用函数,并按顺序调用函数。
all() 方法确实需要func1、func2、func3 和 func4 实际上都是在调用 all() 之前定义的,而嵌套的 if 或 and 表达式只要前面的函数返回真值,方法就只需要定义函数。
