版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AliceGoToAnother/article/details/79083317
装饰器decorator
本质:返回函数的高阶函数
作用:不改变函数原有定义,在代码执行过程中动态增加新功能
类型:带有参数的装饰器,不带有参数的装饰器
一、不带参数的装饰器:
import functools
def log(func):
@functools.wraps(func)
def wrapper(*args , **kw):
print('begin call')
f = func(*args, ** kw)
print('end call')
return f
return wrapper
@log
def test(a):
print(a)
test('Alice')
[注]@functools.wraps(func) :确保装饰之后的函数和之前的函数属性__name__相同,避免依赖函数签名代码执行错误
二、带有参数的装饰器:
import functools
def log(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args,**kw):
print('begin %s' % text)
f = func(*args,**kw)
print('end %s' % text)
return f
return wrapper
return decorator
@log('exe')
def test (a):
print('Alice')
test('Alice')