一层装饰器
# -*- 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
# 第二步执行的时候从内向外,逐层执行