将不确定数量的输入传递给一个函数的子函数

时间:2013-01-18 17:53:33

标签: python

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

应调用的函数名为'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'

1 个答案:

答案 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