Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用参数组合(组合)多个函数调用_Python_Python 3.x_Function Declaration - Fatal编程技术网

Python 如何使用参数组合(组合)多个函数调用

Python 如何使用参数组合(组合)多个函数调用,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 但我想在管

我的全部问题听起来是这样的:如何在不使用分部函数的情况下组合几个带参数的函数调用

现在,下面的当前代码工作正常,但每次提供任何附加参数时,我都需要调用partial:

从functools导入部分 def pipedata,*函数: 对于func中的func: data=funcdata 返回数据 def multdata,数量=5,偏差=2: 返回数据*金额+偏差 def分割数据、金额、偏差=1: 返回数据/金额+偏差 结果=管道5, 穆特, 部分分割,金额=10 打印结果 3.7 但我想在管道函数内部调用部分。因此,打电话应该从这个角度考虑:

结果=管道5, 穆特, 分割金额=10
下面是一个可能对您有所帮助的实现。它是一个用于函数的装饰器,因此您可以通过调用函数本身而不是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}]
)