Search code examples
pythonfunctionsignature

build function signature from list of variable names


I have a list of variable names:

var_names = ['x','y']

and a function that takes vector input, e.g.

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

I want to build a function that creates a multi-input function that does the same thing as f, e.g.

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

Does anybody know how to create a function like g in an automated way? I tried this

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)

but that just gave me something with a signature like this:

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

when I really want this:

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

I appreciate any help/advice that someone can give me. Thanks.


Solution

  • You can use the built-in function exec to define a function dynamically:

    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)