2016-09-30 17 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'はすべてオプションの引数という名前の 'order'に入っているようです。

オプションの引数が指定されているか、または指定されていないときに、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

関連する問題