创建在原始函数中设置关键字参数的部分函数

时间:2016-01-16 20:51:33

标签: python arguments wrapper partial functools

不确定这是否可行,但我试图从具有位置和关键字参数的函数创建部分函数。问题是,我希望结果部分函数中的参数在原始函数中设置一个关键字参数 - 而不是其位置参数之一。

以下是原始函数的定义:

def cost_function(self, X, y, weights=None, lambda_param=0.0):

我想要一个部分函数,​​我可以传递给scipy.minimise,这样我就可以找到最佳权重值(权重是一个ndarray)。

所以我需要的是只有一个参数的部分函数(x说):

E.g。

cost_func(x)

但我希望partial函数在调用原始函数时设置权重参数:

my_network.cost_function(X, y, weights=x, lambda_param=0.0)

(我知道我可以更改原始函数,以便权重参数的位置不是关键字参数,但我不想这样做,因为我也想使用没有权重参数集的函数)。 / p>

1 个答案:

答案 0 :(得分:3)

我认为functools.partial满足您的需求

参见示例:

import functools
def cost_function(self, X, y, weights=None, lambda_param=0.0):
    print (weights)

cost_func = functools.partial(cost_function, None, 20, 30, lambda_param=2.0)


print (cost_func("Yay it worked!!!"))