赞
踩
def w1(func): print("正在装饰1") def inner(): print("----正在验证权限1----") func() return inner def w2(func1): print("正在装饰2") def inner1(): print("----正在验证权限2----") func1() return inner1 @w1 #相当于f1=w1(f1) @w2 #相当于f2=w2(f2) def f1(): print("————f1———————") print("装饰器f1已经装饰完毕") print() @w2 #相当于f1=w1(f1) @w1 #相当于f2=w2(f2) # #多个装饰器装饰的时候是从下往上装饰,装饰器执行到这里的时候一定会执行w1里面的东西,返回了内部函数的引用地址
#一旦执行到@w2这句话的时候就会执行f2=w2(f2),相当于f2指向了innter2的引用地址,func2指向了外部f2函数引用地址,当执行func2()函数的时候相当于执行f2()函数的功能代码块 def f2(): print("————f2———————") print("装饰器f2已经装饰完毕") print() print("-------调用函数f1----") f1() #调用函数的时候,装饰器是按照装饰器的顺序执行。 print("f1函数调用完毕") print() print("-------调用函数f2----") f2() print("f2函数装饰完毕")
下面是执行代码的结果:D:\python3.6\pythonw.exe F:/python项目/09Day/02python核心编程/02装饰器/04多个装饰器.py
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。