1

以下两个代码块之间是否有任何功能差异?我主要关心调用函数的顺序。函数是否在第一if条语句中按顺序执行?

第一的,

if func1() and func2() and func3() and func4():
    do stuff

第二,

if func1():
    if func2():
        if func3():
            if func4():
                do stuff
4

1 回答 1

6

是的,Python 从左到右计算表达式。这些函数将以相同的顺序调用。从参考文档

Python 从左到右计算表达式。

此外,在使用和嵌套表达式时,func2()如果返回 false 值,将不会被调用。引用布尔操作文档func1()andif

表达式x and y首先计算x; 如果x为假,则返回其值;否则,y评估并返回结果值。

因为在表达式中func1() and func2(),如果返回 false 值func2()将不会被评估,根本不会被调用。func1()func2()

您可以在这里使用第三种替代all()方法

functions = (func1, func2, func3, func4)
if all(f() for f in functions):

只要前面的函数返回一个真值并按顺序调用函数,它就会再次调用函数。

all()方法确实需要在调用之前实际定义func1, func2, func3, 和,而嵌套或表达式方法只需要定义函数,只要前面的函数返回一个真值即可。func4all()ifand

于 2013-11-11T18:31:08.147 回答