在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数
可以同时为一个函数指定多个装饰器,这样函数将会安装从内向外的顺序被装饰
(*args , **kwargs)
用于接收位置参数和关键词参数
def fn1(x):
def bread(*args , **kwargs):
print('上层面包')
y = x(*args , **kwargs)
print('下层面包')
return y
return bread # 返回新函数
def fn2(q):
def vegetables(*args , **kwargs):
print('上层蔬菜')
z = q(*args , **kwargs)
print('下层蔬菜')
return z
return vegetables # 返回新函数
# 加了这个装饰器 就相当于 fn3 = fn1(fn3)
@fn1 # 添加面包
def fn3(): # 添加鸡肉
print("鸡肉")
# 加了这个装饰器 就相当于 fn3 = fn1(fn2)
@fn1 # 添加面包
@fn2 # 添加蔬菜
def fn4(): # 添加牛肉
print('牛肉')
fn3()
print("-" * 20, '第一份餐点已经做好,请取餐。')
fn4()
print("-" * 20, '第二份餐点已经做好,请取餐。')
上层面包
上层蔬菜
牛肉
下层蔬菜
下层面包
-------------------- 第一份餐点已经做好,请取餐。
上层面包
鸡肉
下层面包
-------------------- 第二份餐点已经做好,请取餐。