使用给定的参数名称动态生成Python函数

时间:2018-07-12 07:33:34

标签: python python-3.x metaprogramming

我想在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的工作,还是有其他选择?

1 个答案:

答案 0 :(得分:2)

您不需要编写类似的函数。 只需使用** 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)
相关问题