はっきりと説明しなかったらごめんなさい。入力数が異なる事前定義された関数を呼び出すラッパーを作成したいと思います。もちろん、関数ごとに個別のラッパーを作成することはできますが、すべての場合にジェネリックラッパーを作成する方法があるかどうか疑問に思っています。
呼び出す必要のある関数は、入力数が異なる「fun1」および「fun2」という名前です。ラッパー'fun_wrap(func_name、uncertain amount of input)'を作成する必要があります。これには、呼び出される関数名とそれに関連する入力量のみが必要です。
もう1つ、入力名を「_in」を追加して変更し、最初にグローバル変数にする必要があります。以下は私の壊れたコードです。提案をありがとう!
def fun1(a,b):
return a+b
def fun2(a,b,c):
return a*b/c
def set_globals(**kwargs):
for argname in kwargs:
globals()['%s_in' % argname] = kwargs[argname]
def fun_wrap(func_name, uncertain amount of inputs):
ffunc_name(set_globals(uncertain amount of inputs))
このように、次のような引数を使用してfinal_funを呼び出すことができる場合:
fun_wrap(fun1,a,b)
fun_wrap(fun2,a,b)
アップデート
* argを使おうとしましたが、失敗しました...
def fun1(a,b):
return a+b
def fun2(a,b,c):
return a*b/c
def set_globals(**kwargs):
for argname in kwargs:
globals()['%s_in' % argname] = kwargs[argname]
def fun_wrap(func_name, *arg):
func_name(set_globals(*arg))
fun_wrap(fun2,a=1,b=2,c=3)
エラーが発生しました:
Traceback (most recent call last):
File "D:\Dropbox\AppPest\rice\try.py", line 19, in <module>
fun_wrap(fun2,a=1,b=2,c=3)
TypeError: fun_wrap() got an unexpected keyword argument 'a'