我想知道如何在不修改原始公式的情况下如何操纵函数在Python中采用新参数。
例如,我将如何使用平方函数并使用平方函数作为模型来制作另一个函数,例如乘法平方:
原始功能:
def square(x):
result = (x*x)
return(result)
New Function,采用新的参数“ 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。
最后,我想制作一个函数,该函数接受原始函数的所有参数以及一个以上的参数。
谢谢大家!
答案 0 :(得分:1)
如果您注意参数的顺序,那么您将对3进行平方并乘以2。这是因为函数wrapArg
使用第一个参数(2
)作为您要乘以的数字,第二个(3
)是您要平方的数字。
multSquare(3, 2)
将给出您想要的结果。
答案 1 :(得分:0)
除了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