我正在尝试编写一个函数,它将函数列表和第一个参数作为参数。然后它按顺序调用它们,将前一个的输出传递给下一个。 (显然,为了使其工作,所有函数必须具有相同数量的参数并返回相同数量的值。)
这是我试过的:
def chain(functions, *first_func_params):
params = first_func_params
for func in functions:
params = func(*params)
但是,只有当所有函数都返回元组('多个值')或其他序列类型时才会起作用,因为只有序列类型可以解压缩到函数的参数列表中。
如果函数只返回单个值,chain
不起作用。
我可以简单地检查func
的输出是否为元组并相应地采取行动。但是有更优雅的解决方案吗?
你会如何实现这个?
答案 0 :(得分:1)
您可以使用:
if not isinstance(params, tuple):
params = (params,)
或者,如果您尝试在可解包对象之前使用TypeError
,则会捕获将引发的*
异常。