什么是装饰器
装饰器是一个函数,它需要接收一个参数,该参数表示被修饰的函数。
装饰器需要满足的条件
- 装饰器是一个嵌套函数
- 内部函数是一个闭包
- 外部函数接收的是被修饰的函数
四种装饰器
- 不带参数装饰器
def wrapper(func):
print(func)
def new_func(*new_argument):
print('before')
result = func(*new_argument)
print('after')
return result * 2
return new_func
@wrapper #不含参装饰器调用
def row_func(a, b):
print('hello', a, b)
return a + b
print(row_func(10, 20))
- 带参数的装饰器
def wrapper(argument):
def intermediate(func):
def new_func(*args):
print('before', argument)
result = func(*args)
print('after', argument)
return result*2
return new_func
return intermediate
@wrapper('luck') #含参装饰器调用
def row_func(a, b):
print('hello', a, b)
return a+b
print(row_func(10, 20)
- 类不带参数装饰器
class wrapper:
def __init__(self, b):
self.b = b
def __call__(self, *args):
print('before')
result = self.b(*args)
print('after')
@wrapper
def row_func(a, b):
print('hello',a,b)
return a + b
row_func(10, 20)
- 类带参数装饰器
class wrapper:
def __init__(self,a):
self.a = a
def __call__(self,func):
def new_func(*b):
print('before',self.a)
result = func(*b)
print('after', self.a)
return result*2
return new_func
@wrapper('luck')
def row_func(a,b):
print('hello', a, b)
return a+b
print(row_func(3,4))