其他一个如果有条件的话

时间:2014-10-09 13:16:09

标签: python if-statement short-circuiting

我创建了一些函数,如果一切顺利则返回1,如果有错误则返回0。现在,我需要以定义的顺序执行这些函数中的每一个并验证返回值。如果其中一个返回0,我需要立即重启,而不调用任何后续函数。

我打算使用多个if但使用一个else

if function_1():
    if function_2():
        if function_3():
            print "Everything went well"
else:
    reboot()

但它不能像我想的那样工作:我希望在任何这些条件失败后立即执行else部分,现在仅在function_1失败时执行它。

3 个答案:

答案 0 :(得分:7)

有两种方法可以做到这一点。

1)。您可以一起使用一个if语句和and条件。这将产生“短路”行为,因为它将继续通过函数,直到第一个失败,然后其余的都不会执行。

if function_1() and function_2() and function_3():
    print "Everythings went well"
else:
    Reboot

2)如果你想要全部执行,这里有一个方法,虽然它更麻烦。:

successful = True

successful = successful and function_1()
successful = successful and function_2()
successful = successful and function_2()

if successful:
    print "Everythings went well"
else:
    Reboot

答案 1 :(得分:4)

可以通过all()以更紧凑的方式获得所需的短路行为(只要您的任何函数返回else),就会直接跳转到False子句:

让我们设置一些虚拟函数用于演示目的:

def function_1():
    print("first")
    return True

def function_2():
    print("second")
    return False

def function_3():
    print("third")
    return True

...现在,使用此代码:

functions = [function_1, function_2, function_3]

if all(f() for f in functions):
    print("all good")
else:
    print("oh no!")

...我们得到了这个输出:

first
second
oh no!

答案 2 :(得分:2)

你可以列一个清单:

functions = [function_1(), function_2(), function_3()]

然后检查所有这些:

if all(functions):
    print 'OK'
else:
    Reboot

这样你就可以运行所有函数(假设这是一个要求),并检查是否所有函数都是真的。

假设所有功能都通过:

In [1]: functions = [True, True, True]

In [2]: all(functions)
Out[2]: True

或者如果失败了:

In [3]: functions = [True, True, False]

In [4]: all(functions)
Out[4]: False