装饰器

如果要增强某一函数的功能,但又不希望修改原函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。写代码需要遵循开放封闭原则,已经实现的功能代码不允许被修改,但可以被扩展

    print("add_qx装饰器执行之前,调用add_xx函数传参数haha")
    print(haha)
 
    def add_qx(func):
        print("开始执行add_qx装饰器")
 
        def wrarpp2():
            print("执行了wrarpp2函数")
            return func()
 
        return wrarpp2
 
    return add_qx
 
 
haha = "http://www.baidu.com"
 
 
@add_xx(haha)  # 1.调用add_xx函数,将其返回值add_qx装饰text()
# 2.相当于text = add_qx(text)  text 指向 wrapp2
def text():
    print("正在执行text函数")
 
 
text()  # text指向add_qx里面wrapp2函数

多个装饰器

def add_qx(func):
    #此时 func 指向wrapp2
 
    print("正在执行add_qx装饰器")
    def wrarpp1():
        print("执行了wrarpp1函数")
        return func()
    return wrarpp1
 
def add_xx(func):
    #2.func指向 text函数
    print("正在执行add_xx装饰器")
    def wrarpp2():
        print("执行了wrarpp2函数")
        return func()
    return wrarpp2
@add_qx #3.相当于 text = add_qx(text) 原来右边text是指向wrppp2函数的,
# 传参意味着将wrapp2的引用传给是 add_qx里面的实参func,左边text指向add_qx里面wrapp1函数的
 
@add_xx # 1.相当于 text=add_xx(text)  此时text指向add_xx里面wrarpp2函数
def text():
    print("正在执行text函数")
text() #text指向add_qx里面wrapp1函数的
posted @ 2022-03-22 00:28  我是小菜鸡丫丫  阅读(33)  评论(0编辑  收藏  举报