24、装饰器
1、@ + 函数名:#1自动执行outer函数并且将下面的函数名f1当做参数传递
#2将outer函数的返回值,重新赋值给f1.
def outer(func):
def inner():
print('before')
r = func()
def inner():
print('before')
r = func()
print('after')
return r ==>有返回值时这么处理。
return inner
@outer
def f1():
print('nihao')
@outer
def f1():
print('nihao')
return 'nimei'
注意:定义函数,未调用函数内部不执行;函数名代指的函数的整体。
2、应用:
def outer(func):
def inner(*args,**kwargs):
print('before')
r = func(*args,**kwargs)
print('after')
return r
return inner
@outer
def f1():
pass
@outer
def f2():
pass
.......
@outer
def f100():
pass
3、有参数时: 万能参数。。
def outer(func):
def inner(*args,**kwargs):
print('before')
r = func(*args,**kwargs)
print('after')
return r
return inner
@outer
def f1(arg):
print(arg)
return 'nimei'
@outer
def f2(a,b):
print(a,b)