一层装饰器
# -*- coding: utf-8 -*- def func1(func): print("func1-1") def inner1(): print("inner1-1") func() print("inner1-2") print("func1-2") return inner1 @func1 def func(): print("func") # 第一步改变函数指向 # 相当于 func1(func) -> inner1 # func1-1 # func1-2 # 脚本执行的时候就动态添加了func 的指向,现在func指向inner1 # 第二步,执行函数,相当于执行内部函数 # func() # 相当于 func1(func)() -> inner1() # func1-1 # func1-2 # inner1-1 # func # inner1-2
两层装饰器
def func2(func): print("func2-1") def inner2(): print("inner2-1") func() print("inner2-2") print("func2-2") return inner2 @func2 @func1 def func(): print("func") # 相当于 # func2(func1(func)) -> func2(inner1) -> inner1 + inner2 # func1-1 # func1-2 -> inner1 # func2-1 # func2-2 -> inner2 # 第一步,按照叠放顺序下到上逐层添加 func() # 相当于 # func2(func1(func))() # func1-1 # func1-2 ->inner1 # func2-1 # func2-2 ->inner2 # inner2-1 # inner1-1 ->inner2 # func # inner1-2 # inner2-2 ->inner1 # 第二步执行的时候从内向外,逐层执行