我正在尝试在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
)
答案 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)