Python 如何传递函数';输出到另一个函数作为输入?

Python 如何传递函数';输出到另一个函数作为输入?,python,function,parameters,Python,Function,Parameters,我正在尝试编写一个函数,它将函数列表和第一个函数的参数作为参数。然后按顺序调用它们,将前一个的输出传递到下一个。(显然,要使其正常工作,所有函数必须期望相同数量的参数并返回相同数量的值) 以下是我尝试过的: def chain(functions, *first_func_params): params = first_func_params for func in functions: params = func(*params) 但是,只有当所有函数都返回元

我正在尝试编写一个函数,它将函数列表和第一个函数的参数作为参数。然后按顺序调用它们,将前一个的输出传递到下一个。(显然,要使其正常工作,所有函数必须期望相同数量的参数并返回相同数量的值)

以下是我尝试过的:

def chain(functions, *first_func_params):
    params = first_func_params
    for func in functions:
        params = func(*params)
但是,只有当所有函数都返回元组(“多个值”)或其他序列类型时,这才有效,因为只有序列类型才能解压缩到函数的参数列表中

如果函数只是返回单个值,
chain
不起作用

我可以简单地检查
func
的输出是否为元组,并相应地执行操作。但是有更优雅的解决方案吗

您将如何实现这一点?

您可以使用:

if not isinstance(params, tuple):
    params = (params,)

或者捕获
TypeError
异常,如果您尝试在解包对象之前使用
*
,将引发该异常。

我可以这样做。但是有更优雅的解决方案吗?@AvivCohn对我来说这很优雅,恐怕我想不出另一种方法来做……我想我的建议是不要写这个函数:-)。有太多的角落案例可能会让人大吃一惊。e、 g.您传递
[foo,bar]
,并且
foo
返回一个
namedtuple
(这是
bar
期望的输入)--不幸的是,管道失败,因为您的函数组合决定在刚通过参数时解包namedtuple。您是否可以让您的函数期望一个元组作为输入
f(t)
,以便它可以手动解包参数,如
a,b,c=t
?然后,返回值在任何情况下都应该是元组(例如,
return(True,)
)。这样就不需要特殊情况