- 有参装饰器
带参数的装饰器是三层的
最外层的函数负责接收装饰器参数
里面的内容还是原装饰器的内容
from functools import wraps
def 有参装饰器(x, y, z): # x,y,z可为内部任一函数传参
def outter(func):
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
return res
return wrapper
return outter
@有参装饰器(x=1, y=2, z=3)
def 被装饰对象():
pass
案例:
def outer(a): # 第一层,负责接收装饰器的参数
print('-------1 start')
def decorate(func): # 第二层,负责接收函数
print('------2 start')
def wrapper(*args, **kwargs): # 第三层,负责接收函数的参数
res = func(*args, **kwargs)
print('---->铺地砖{}块'.format(a))
return res
print('------2 end')
return wrapper # 返回出来的是 第三层
print('-------1 end')
return decorate # 返回出来的是 第二层
@outer(100) # 铺100块地砖
def house(time):
print('我{}日期拿到房子的要是,是毛坯房...'.format(time))
house('2024-01-18')