对不起,如果我没有清楚地解释自己。 我想创建一个包装器来调用具有不同数量输入的预定义函数。当然,我可以为每个函数创建一个单独的包装器,但我想知道是否有办法为所有情况创建一个通用的包装器。
应调用的函数名为'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)
UPDATE
我尝试使用* 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'
答案 0 :(得分: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