【发布时间】:2019-10-24 20:56:48
【问题描述】:
我有一个函数列表,如下所示:
def foo(a, b):
# do stuff
return True # or False
def bar(c):
# do stuff
return False # or True
def baz(d, e, f):
# do stuff
return True # or False
我想依次调用它们中的每一个,如果前一个返回True,则只进行下一个,如下所示:
if foo(1, 2):
if bar(3):
if baz(4, 5, 6):
print("Success!")
现在,我知道如果我的所有函数都接受相同的参数,我可以这样做:
steps = [foo, bar, baz]
if all(func(*args) for func in steps):
print("Success!")
因为all 一旦达到False 返回值就会短路。但是,它们并不都接受相同的论点。
实现这一目标的最简洁方法是什么?
编辑:感谢有关压缩 args 的建议。如果每个函数返回一些值,并且我想使用前一个函数的返回值(无论它可能是什么)来决定我是否运行下一个函数,那么更一般的情况呢?每个函数也可能需要一些先前函数的返回值作为参数。
【问题讨论】:
-
然后执行
arguments = [[1, 2], [3], [4, 5]],然后执行all(func(*args) for func, args in zip(steps, arguments)) -
如果您有参数集列表并将其与函数一起压缩,则可以使用
all方法的变体。 -
您的问题正在迅速变得过于广泛,您应该询问您要解决的确切问题
-
鉴于您的问题已有多个答案,您最好只提出一个新问题
-
您的编辑使通用解决方案变得困难,可能有太多变化。
标签: python python-3.x