如何操作函数以接受新参数?

时间:2019-06-18 23:57:45

标签: python python-3.x

我想知道如何在不修改原始公式的情况下如何操纵函数在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。

最后,我想制作一个函数,该函数接受原始函数的所有参数以及一个以上的参数。

谢谢大家!

2 个答案:

答案 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