如何在Python中为此简单函数编写装饰器?

时间:2018-12-26 07:15:57

标签: python python-decorators

例如,这是我的功能:

def myfunc(x,y):
    print(x+y)

现在我要为其编写装饰器 我希望装饰器在x + y之后仅打印“测试” 我的意思是我下次想打电话给myfunc(x,y) 我希望结果有所作为 像这样

x+y   
test

我这样做的原因是我想学习将带有参数的函数传递给装饰器,如果为此编写装饰器,我将在此简单示例中学习到。 感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式做到这一点:

def mydecorator(f):
    def wrapper(x,y):
        print ("inside my decorator")
        f(x,y)
        print ("test")
    return wrapper

@mydecorator
def myfunc(x,y):
    print(x+y)

myfunc(4,5)

以上代码执行的输出为:

inside my decorator
9
test

答案 1 :(得分:1)

要使此功能适用于具有任意数量个参数的函数,您可以采用以下方式:

def print_test(func):
  def wrapper(*args,**kwargs):
    res = func(*args,**kwargs)
    print('test')
    return res
return wrapper

@print_test
def myfunc(x,y):
    print(x+y)

myfunc(2,3)