0

对不起,如果我没有清楚地解释自己。我想创建一个包装器来调用具有不同输入数量的预定义函数。当然,我可以为每个函数创建一个单独的包装器,但我想知道是否有一种方法可以为所有情况创建一个通用包装器。

应该调用的函数名为“fun1”和“fun2”,输入数量不同。我需要创建一个包装器'fun_wrap(func_name,不确定的输入量)',它只需要调用函数名称及其相关的输入量。

还有一件事,我需要通过添加“_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 回答