装饰器的原理就是闭包:函数内包含子函数,子函数引用了函数的变量,并最终return子函数。
用于扩展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能;
https://blog.youkuaiyun.com/xiangxianghehe/article/details/77170585
单个装饰器:
def dec1(func):
print("1111")
def one():
print("2222")
func()
print("3333")
return one
@dec1
def test(): #dec1(test)
print("test test")
test()
1111
2222
test test
3333
多个装饰器执行的顺序就是从最后一个装饰器开始,执行到第一个装饰器,再执行函数本身;
应该是说先执行@dec2,输出aaaa,再执行@dec1,输出1111,最后执行test。在执行test函数的时候又会按照one(2222)->two(bbbb)->test(test test)->two(cccc)->one(3333)的顺序执行
def dec1(func):
print("1111")
def one():
print("2222")
func()
print("3333")
return one
def dec2(func):
print("aaaa")
def two():
print("bbbb")
func()
print("cccc")
return two
@dec1
@dec2
def test():
print("test test")
test()
aaaa
1111
2222
bbbb
test test
cccc
3333