2016-09-30 68 views
0

我有這樣的函數包裝。命名可選參數和多個參數順序

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' 

我猜的錯誤是,如果我不指定 '秩序',funcWrapper會傳遞'dsX1'和'dy'作爲* arg傳遞,但事實證明它們不是。無論我指定一個可選參數,似乎'dsX1'和'dy'都進入名爲可選參數的'順序'。

當可選參數爲/或未指定時,如何製作可將dsX1和dy傳遞到* arg的函數包裝器?

回答

1

你可以只修改電話:

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

,或者你可以做這樣的事情:

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

謝謝您的回答。看來我總是必須遵循這個順序。如果我喜歡funcWrapper(gd.squared_error,[dsX1,dy]),[dsX1,dy]進入可選狀態並且不起作用。如果我做funcWrapper(gd.squared_error,* arr),dsX1進入選項... – noclew