命名可选参数和多个参数顺序

时间:2016-09-30 01:01:29

标签: python closures

我有一个像这样的函数包装器。

def funcWrapper(fn_ng, order=None, *args ):
    def clsr(X):
        if order is not None:
            X = calc_poli_dsX(X, order)
        return fn_ng(X, *args);
    return clsr;

但是,如果我使用此功能如下:

mGrdnt = funcWrapper( gd.squared_error, dsX1, dy, order=None)
mGrdnt = funcWrapper( gd.squared_error, dsX1, dy)

我有错误

 TypeError: funcWrapper() got multiple values for keyword argument 'order' 

我的猜测是,如果我没有指定' order',funcWrapper将通过' dsX1'并且' dy'作为* arg传递,但事实证明它们不是。无论我指定一个可选参数,似乎' dsX1'并且' dy'所有人都进入了“订单”。命名为可选参数。

当可选参数是/或未指定时,如何创建一个可以将dsX1和dy传递给* arg的函数包装器?

1 个答案:

答案 0 :(得分:1)

您只需修改通话:

arr = [dsX1, dy]
funcWrapper(gd.squared_error, None, *arr)

或者您可以这样做:

funcWrapper(gd.squared_error, [dsX1, dy])