Как я могу написать декоратор для этой простой функции в Python? - PullRequest
0 голосов
/ 26 декабря 2018

например, это моя функция:

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

Теперь я хочу написать для него декоратор. Я хочу, чтобы декоратор просто печатал «test» после x + y. Я имею в виду, что хочу в следующий раз, когда явызов myfunc (x, y) Я хочу, чтобы результаты были примерно такими:

x+y   
test

Причина, по которой я это делаю, заключается в том, что я хочу научиться передавать функцию с аргументами декоратору, если вы пишете декоратордля этого я узнаю это в этом простом примере.Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Чтобы сделать это для функции с произвольным числом аргументов, вы можете сделать это следующим образом:

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)
0 голосов
/ 26 декабря 2018

Вы можете сделать это следующим образом:

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
...