动态生成具有给定参数名称的 Python 函数
Dynamic generation of Python function with given parameter names
我想在我的 Python3 代码中创建函数,利用 运行 期间提供的数据。我坚持如何按照
的方式编写函数
def foo(varname1, varname2):
return varname1 + varname2
其中给出参数名称的字符串 varname1
和 varname2
被指定为某些构造函数的参数,例如:
def makeNewFooFunc(varname1, varname2):
# do magic
return foo
fooFunc = makeNewFooFunc('first', 'second')
print(fooFunc(first=1, second=2))
# should return 3
#do magic
步骤是什么?这是 eval
的工作,还是有其他选择?
您不需要编写那样的函数。
只需使用 **kwargs
def foo_func(**kwargs):
return sum(kwargs.values())
foo_func(any_name=1, any_name_2=2)
但如果你仍然需要做你想做的,你可以试试
def make_new_func(var_name_1, var_name_2):
def foo(**kwargs):
# make sure in kwargs only expected parameters
assert set(kwargs) == {var_name_1, var_name_2}
return kwargs[var_name_1] + kwargs[var_name_2]
return foo
foo_func = make_new_func('a', 'b')
foo_func(a=1, b=2)
我想在我的 Python3 代码中创建函数,利用 运行 期间提供的数据。我坚持如何按照
的方式编写函数def foo(varname1, varname2):
return varname1 + varname2
其中给出参数名称的字符串 varname1
和 varname2
被指定为某些构造函数的参数,例如:
def makeNewFooFunc(varname1, varname2):
# do magic
return foo
fooFunc = makeNewFooFunc('first', 'second')
print(fooFunc(first=1, second=2))
# should return 3
#do magic
步骤是什么?这是 eval
的工作,还是有其他选择?
您不需要编写那样的函数。 只需使用 **kwargs
def foo_func(**kwargs):
return sum(kwargs.values())
foo_func(any_name=1, any_name_2=2)
但如果你仍然需要做你想做的,你可以试试
def make_new_func(var_name_1, var_name_2):
def foo(**kwargs):
# make sure in kwargs only expected parameters
assert set(kwargs) == {var_name_1, var_name_2}
return kwargs[var_name_1] + kwargs[var_name_2]
return foo
foo_func = make_new_func('a', 'b')
foo_func(a=1, b=2)