1、带参数的装饰器
FLAGE = True
def timmer_out(flage):
def timmer(f):
def inner(*args, **kwargs):
if FLAGE:
print("before")
ret = f(*args, **kwargs)
print("after")
return ret
else:
ret = f(*args, **kwargs)
return ret
return inner
return timmer
@timmer_out(FLAGE)
def func1(s):
print("in the func1")
return s
@timmer_out(FLAGE)
def func2():
print("in the func2")
ret = func1(111111)
print(ret)
func2()
>>>
before
in the func1
after
111111
before
in the func2
after
对比将FLAGE设置为False:
FLAGE = False
def timmer_out(flage):
def timmer(f):
def inner(*args, **kwargs):
if FLAGE:
print("before")
ret = f(*args, **kwargs)
print("after")
return ret
else:
ret = f(*args, **kwargs)
return ret
return inner
return timmer
@timmer_out(FLAGE)
def func1(s):
print("in the func1")
return s
@timmer_out(FLAGE)
def func2():
print("in the func2")
ret = func1(111111)
print(ret)
func2()
>>>
in the func1
111111
in the func2
2、多个装饰器装饰一个函数
可以按照俄罗斯套娃来理解多个装饰器装饰一个函数,函数寻找装饰器是按照就近原则的
def wrapper1(f):
def inner1(*args, **kwargs):
print("before, in the inner1")
ret = f(*args, **kwargs)
print("after, in the inner1")
return ret
return inner1
def wrapper2(f):
def inner2(*args, **kwargs):
print("before, in the inner2")
ret = f(*args, **kwargs)
print("after, in the inner2")
return ret
return inner2
@wrapper1
@wrapper2
def func():
print("in the func")
func()
>>>
before, in the inner1
before, in the inner2
in the func
after, in the inner2
after, in the inner1