0

はっきりと説明しなかったらごめんなさい。入力数が異なる事前定義された関数を呼び出すラッパーを作成したいと思います。もちろん、関数ごとに個別のラッパーを作成することはできますが、すべての場合にジェネリックラッパーを作成する方法があるかどうか疑問に思っています。

呼び出す必要のある関数は、入力数が異なる「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'
4

1 に答える 1

1
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, **kwargs):
    set_globals(**kwargs)       # made the call to set_globals before calling your function
    return func(**kwargs)       # return the value returned by the functions called
于 2013-01-18T18:47:47.357 に答える