从变量名列表构建函数签名
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)
我有一个变量名列表:
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)