具有不同争论长度的函数的函数

时间:2014-11-13 00:25:42

标签: python functional-programming

我正在尝试在python中创建一个函数,该函数接受具有任意数量的变量和参数n的函数,并返回相同的函数,但在第n个变量中添加了1。这样的一个例子将被赋予诸如d = f(w, x, y, z)之类的函数,对func_want(d, 2)的函数调用将产生=> f(w, x, y+1, z)。同样,如果e = f(x,y)func_want(e, 0) => f(x+1,y)

我理解如何使用*args来构建一个函数,该函数采用具有不同争论的函数,但我似乎无法弄清楚如何采用一种方法来分解'基于索引的变量(即n

2 个答案:

答案 0 :(得分:2)

当您使用*args时,您获得的args只是一个元组,因此args[n]只是第n个参数。所以,你可以做args[:n] + (args[n]+1,) + args[n+1:]。或者,可能更可读,只需将args转换为列表。

例如:

def func_want(func, n):
    def wrapper(*args):
        args = list(args)
        args[n] += 1
        return func(*args)
    return wrapper

def f(w, x, y, z):
    return w, x, y, z

func_want(f, 2)(0, 0, 0, 0)

...将返回(0, 0, 1, 0)

答案 1 :(得分:0)

def function_want(f, n):
    return f(lambda *args: args[:n] + (args[n]+1,) + args[n+1:])[0]
def f(*args):
    return args

现在,如果我们检查n=5,我们会得到:

>>> new_f = function_want(f, 5)
>>> new_f(0,0,0,0,0,0)
(0, 0, 0, 0, 0, 1)