一層裝飾器
# -*- 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
# 第二步執行的時候從内向外,逐層執行