从变量名列表构建函数签名

build function signature from list of variable names

我有一个变量名列表:

var_names = ['x','y']

和一个接受向量输入的函数,例如

def f(vec):
   return vec[0]+vec[1]

我想构建一个函数来创建一个与 f 做同样事情的多输入函数,例如

def g(x,y):
   return f([x,y])

有人知道如何自动创建类似 g 的函数吗?我试过了

def _create_multiInput_fcn(vector_fcn,var_list):
    def g(*var_list):
        out = vector_fcn(var_list)
        return out
    return g

g = _create_multiInput_fcn(f,var_list)

但这只是给了我一个像这样的签名:

<function __main__._create_multiInput_fcn.<locals>.f(*var_list)>

当我真的想要这个时:

<function __main__._create_multiInput_fcn.<locals>.f(x,y)>

我很感激任何人可以给我的 help/advice。谢谢。

您可以使用内置函数exec动态定义一个函数:

def _create_multiInput_fcn(vector_fcn,var_list):
    exec('''
def g({0}):
    return vector_fcn([{0}])
'''.format(','.join(var_list)), globals(), locals())
    return g
g = _create_multiInput_fcn(f,var_list)