python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。
def dec1(func):
print("1111")
def one():
print("2222")
func()
print("3333")
return one
@dec1
def test():
print("test test")
test()
返回结果:
1111
2222
test test
3333
带参数的装饰器
def dec1(func):
print("aaaa")
def one(a,b):
print("----%d" % a)
func(a,b)
print("----%d" % b)
return one
@dec1
def test(a,b):
print("test test")
test(10,20)
执行结果:
aaaa
----10
test test
----20
不定参数的装饰器
def dec1(func):
print("aaaa")
def one(*args, **kwargs):
print("bbbb")
func(*args, **kwargs)
print("cccc")
return one
@dec1
def test(a,b):
print("test test")
@dec1
def test1(c,d,e):
print("test1 test1")
test(10,20)
test1(30,40,50)
返回结果:
aaaa
aaaa
bbbb
test test
cccc
bbbb
test1 test1
cccc
多个装饰器执行的顺序就是从最后一个装饰器开始,执行到第一个装饰器,再执行函数本身
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