python装饰器@深度加工(三分钟读懂)

在不修改原函数的情况下,来对函数进行扩展

在定义函数时,可以通过@装饰器,来使用指定的装饰器,来装饰当前的函数
可以同时为一个函数指定多个装饰器,这样函数将会安装从内向外的顺序被装饰
(*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, '第二份餐点已经做好,请取餐。')


上层面包
上层蔬菜
牛肉
下层蔬菜
下层面包
-------------------- 第一份餐点已经做好,请取餐。
上层面包
鸡肉
下层面包
-------------------- 第二份餐点已经做好,请取餐。

你可能感兴趣的:(Python,python)