代码之家  ›  专栏  ›  技术社区  ›  beldaz Nicolas W.

给定参数名的python函数的动态生成

  •  0
  • beldaz Nicolas W.  · 技术社区  · 6 年前

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ilya Miroshnichenko    6 年前

    你不需要写这样的函数。 就用**夸克

    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)