1.最简单的装饰器
def log(func):
def wrapper(*args, **kw):
print('start log')
return func(*args, **kw)
return wrapper
@log
def test():
print('start test')
test()
输出:
start log
start test
2.带参数的装饰器
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print(text + ' ' + func.__name__)
return func(*args, **kw)
return wrapper
return decorator
@log('execute')
def test():
print('start test')
test()
print(test.__name__)
输出:
execute test
start test
wrapper
3.最终版,不改变test.__name__的值
import functools
def log(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print(text + ' ' + func.__name__)
return func(*args, **kw)
return wrapper
return decorator
@log('execute')
def test():
print('start test')
test()
print(test.__name__)
输出:
execute test
start test
test