Python 如何使用参数组合(组合)多个函数调用
我的全部问题听起来是这样的:如何在不使用分部函数的情况下组合几个带参数的函数调用 现在,下面的当前代码工作正常,但每次提供任何附加参数时,我都需要调用partial: 从functools导入部分 def pipedata,*函数: 对于func中的func: data=funcdata 返回数据 def multdata,数量=5,偏差=2: 返回数据*金额+偏差 def分割数据、金额、偏差=1: 返回数据/金额+偏差 结果=管道5, 穆特, 部分分割,金额=10 打印结果 3.7 但我想在管道函数内部调用部分。因此,打电话应该从这个角度考虑: 结果=管道5, 穆特, 分割金额=10Python 如何使用参数组合(组合)多个函数调用,python,python-3.x,function-declaration,Python,Python 3.x,Function Declaration,我的全部问题听起来是这样的:如何在不使用分部函数的情况下组合几个带参数的函数调用 现在,下面的当前代码工作正常,但每次提供任何附加参数时,我都需要调用partial: 从functools导入部分 def pipedata,*函数: 对于func中的func: data=funcdata 返回数据 def multdata,数量=5,偏差=2: 返回数据*金额+偏差 def分割数据、金额、偏差=1: 返回数据/金额+偏差 结果=管道5, 穆特, 部分分割,金额=10 打印结果 3.7 但我想在管
下面是一个可能对您有所帮助的实现。它是一个用于函数的装饰器,因此您可以通过调用函数本身而不是partialfunc来创建分部函数,…: 使用任何您希望您的行为具有的功能,将其装饰如下:
@make_partial
def divide(data, amount, bias=1):
return data/amount + bias
现在您可以调用管道,正如您所描述的那样,调用divideamount=10现在也会返回一个partial
result = pipe(5, mult, divide(amount=10))
在管道中进行部分调用是很困难的,因为您可能需要在不调用它的情况下传入所需的函数及其默认参数。此方法试图消除此问题并保持现有函数的干净
我唯一能建议的另一种方法是传递函数列表、部分参数列表和关键字参数dict列表。您的函数签名将是pipedata、funcs、args、kwargs
要调用管道,它会变得有点复杂:
result = pipe(
5,
[mult, divide],
[[], []],
[{}, {'amount': 10}]
)
考虑一下。好的建议,但我相信一定有办法,也许没有包装所有的功能,请参阅我的编辑。您可以很容易地更改它,以便以不同的格式输入函数的数据,但这似乎足够清楚。
def pipe(data, funcs, args, kwargs):
for func, arg_list, kwarg_list in zip(funcs, args, kwargs):
data = partial(func, *arg_list, **kwarg_list)(data)
return data
result = pipe(
5,
[mult, divide],
[[], []],
[{}, {'amount': 10}]
)