我想知道如何在不修改原始公式的情况下在Python中操作一个函数来接受新的参数。
例如,我如何使用平方函数,并使用平方函数作为模型来生成另一个函数,如乘平方函数:
原始函数:
def square(x):
result = (x*x)
return(result)
New函数,接受一个新参数"y":
def multSquare(x,y):
result = y*square(x)
return(result)
我试过使用装饰器,但似乎不能正常工作。
def addArg(tarFun):
def wrapArg(y, *args, **kwargs):
result=tarFun(*args, **kwargs) * y
return result
return wrapArg
def square(x):
result = (x*x)
return(result)
multSquare = addArg(square)
print(square(2)) # This should be 4
print(multSquare(2,3)) # This should be 12
这不起作用,因为我不知道如何注入y。
最后,我想做一个函数,它接受原始函数的所有参数,再加上一个参数。
谢谢大家!
发布于 2019-06-19 08:07:51
如果注意参数的顺序,就会发生这样的情况:您将3平方并将其乘以2。这是因为您的函数wrapArg
使用第一个参数(2
)作为您要乘以的数字,而第二个参数(3
)作为您要平方的数字。
multSquare(3, 2)
会给出你想要的结果。
发布于 2019-06-19 08:40:42
除了busybear所说的之外,您还可以交换参数
def addArg(fun):
def wrapArg(x, y):
result = fun(x) * y
return result
return wrapArg
def square(x):
result = (x * x)
return(result)
multSquare = addArg(square)
print(square(2)) # This should be 4
print(multSquare(2, 3)) # This should be 12
或者仅使用可选参数
def square(x, y = None):
sq = x*x
if y:
sq *= y
return sq
https://stackoverflow.com/questions/56658452
复制相似问题