在Python中,根据现有函数的多个参数创建一个可调用函数仅取决于一个自由参数。

4
以下是Matlab代码示例:
costFunc = @(p) nnCostFunction(p, input_layer_size, hidden_layer_size, ...
                               num_labels, X, y, lmbd);

它需要函数nnCostFunction,除了p参数之外的所有参数,将其转化为依赖于p的可调用函数。

也就是说,你可以调用完整的函数:

result = nnCostFunction(p, input_layer_size, hidden_layer_size,num_labels, X, y, lmbd)

或者调用新函数:

result = costFunction(p)

有没有办法在Python中做类似的事情?


1
p 到底是什么?当然,这是可能的。请查阅 functools.partial :) - han solo
变量的名称。例如,如果您想调用常规完整函数,则必须提供p(在这种特定情况下是权重数组,但我认为这并不重要),但如果您想调用costFunc,则只需使用costFunc(p)调用它。 - Maverick Meerkat
1个回答

5
你可以使用 functools.partial
from functools import partial

costFunc = partial(nnCostFunction, input_layer_size, hidden_layer_size, ...
                           num_labels, X, y, lmbd)

然后只需使用p调用它:
costFunc(p)

请注意,如果您希望参数 p 在第一个(或中间某个位置)被传递,您需要将其包装在另一个函数中,这样它才会成为第一个参数。

def costFunc(p):
    return nnCostFunction(p, input_layer_size, hidden_layer_size, ...
                               num_labels, X, y, lmbd)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接