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,)
)。这样就不需要特殊情况