示例:
def before(func): #定义修饰器
def wrapper(*args, **kwargs):
print('Before function called.')
return func(*args, **kwargs)
return wrapper
def after(func): #定义修饰器
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print('After function called.')
return result
return wrapper
@before
@after
def test(): #同时使用两个修饰器改造函数
print(3)
运行:test()
结果:
Before function called.
3
After function called.
结果分析:
首先了解装饰器的流程:
@before
@after
def test(): #同时使用两个修饰器改造函数
print(3)
这一步相当于test=before(after(test)),返回before的WRAP函数,但是不执行。
test()--------before(after(test))() 执行before的WRAP函数 结果是:Before function called,同时返回一个函数after(test)()
after(test)()-----执行after的WRAP函数,结果是:result = func(*args, **kwargs):输出3;print('After function called.')输出After function called,同时返回一个result,因为test没有return语句所以不返回结果:
这里有几点需要说明:
def aa():
print(5)
return "6"
bb=aa() ---输出 5,但是不返回return的结果
bb---输出“6”
返回上一个例子的,result = func(*args, **kwargs)就相当于result=test(),输出print(5)---5;return result由于test()没有return语句所以啥也不返回,我们知道默认是返回none的,现在我们把上面串起来
print(test())------print(before(after(test))())
结果是:
Before function called.
3
After function called.
none
这里显示出了NONE,因为用了print输出了函数的默认返回。
这算自己的理解,如有不妥请指出共同进步。



