动态生成具有给定参数名称的 Python 函数

Dynamic generation of Python function with given parameter names

我想在我的 Python3 代码中创建函数,利用 运行 期间提供的数据。我坚持如何按照

的方式编写函数
def foo(varname1, varname2):
    return varname1 + varname2

其中给出参数名称的字符串 varname1varname2 被指定为某些构造函数的参数,例如:

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)