我创建了一些函数,如果一切顺利则返回1,如果有错误则返回0。现在,我需要以定义的顺序执行这些函数中的每一个并验证返回值。如果其中一个返回0,我需要立即重启,而不调用任何后续函数。
我打算使用多个if
但使用一个else
:
if function_1():
if function_2():
if function_3():
print "Everything went well"
else:
reboot()
但它不能像我想的那样工作:我希望在任何这些条件失败后立即执行else
部分,现在仅在function_1
失败时执行它。
答案 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