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.
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)