一、带参数的装饰器
一个装饰器同时装饰多个函数:
def timer_out():
def timer(func):
def inner(*args,**kwargs):
print('装饰函数前')
ret = func(*args,**kwargs)
print('装饰函数后')
return ret
return inner
return timer
@timer_out()
def func1():
print('1111')
@timer_out()
def func2():
print('2222')
func1()
func2()
#装饰函数前
#1111
#装饰函数后
#装饰函数前
#2222
#装饰函数后
假如你有成千上万个函数使用了一个装饰器,现在你想把这些装饰器都取消掉,你要怎么做?
一个一个的取消掉? 没日没夜忙活3天。。。
过两天你领导想通了,再让你加上。。。
改进版:
flog = False
def timer_out(flog):
def timer(func):
def inner(*args,**kwargs):
if flog:
print('装饰函数前')
ret = func(*args,**kwargs)
print('装饰函数后')
return ret
else:
ret = func(*args, **kwargs)
return ret
return inner
return timer
@timer_out(flog)
def func1():
print('1111')
@timer_out(flog)
def func2():
print('2222')
func1()
func2()
#1111
#2222
二、多个装饰器装饰一个函数
def wahaha1(func):
def inner1(*args,**kwargs):
print('1')
ret = func(*args,**kwargs)
print('1')
return ret
return inner1
def wahaha2(func):
def inner2(*args,**kwargs):
print('2')
ret = func(*args,**kwargs)
print('2')
return ret
return inner2
def wahaha3(func):
def inner3(*args,**kwargs):
print('3')
ret = func(*args,**kwargs)
print('3')
return ret
return inner3
@wahaha1
@wahaha2
@wahaha3
def f():
print('函数')
f()
# 1
# 2
# 3
# 函数
# 3
# 2
# 1
多个装饰器装饰一个函数的关系: