Python装饰器是拓展原函数功能的一种函数,返回值也是一个函数。
在不更改原函数的代码的前提下,使用运算符@
。用于包装任何可调用的对象,并且可用于方法和函数。
-
带有参数的装饰器
-
带有不定参数的装饰器
-
多个装饰器
def deco(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
return wrapper
@deco # 等价于func=deco(func)
def func(m, n):
pass
@deco
def func2(m, n, k):
pass
执行顺序是从最后一个装饰器开始,执行到第一个装饰器,再执行函数本身。
def deco1(func):
print("1111")
def one():
print("2222")
func()
print("3333")
return one
def deco2(func):
print("aaaa")
def two():
print("bbbb")
func()
print("cccc")
return two
@deco1
@deco2
def test():
print("test test!")
test()
# 有test函数
aaaa
1111
2222
bbbb
test test!
cccc
3333
# 没有test函数
aaaa
1111
(最近更新:2019年05月20日)