无参数的装饰器,记住return原函数
def wrapper(f):
def inner(*args, **kwargs):
print('调用前')
result = f(*args, **kwargs)
print('调用后')
return result # 注意要return 原函数
return inner
@wrapper
def add(a,b):
return a+b
@wrapper
def minus(a,b):
return a-b
r1 = add(1,2)
r2 = minus(1,2)
print(r1)
print(r2)
带参数的装饰器,就是在wrapper外面再包一层,共3层
def logger(text):
def wrapper(f):
def inner(*args, **kwargs):
print('调用前')
result = f(*args, **kwargs)
print('调用后')
print('log日志',text)
return result
return inner
return wrapper
@logger('function add')
def add(a,b):
return a+b
@logger('function minus')
def minus(a,b):
return a-b
r1 = add(1,2)
r2 = minus(1,2)
print(r1)
print(r2)