装饰器
如果要增强某一函数的功能,但又不希望修改原函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(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函数的