Python多层装饰器执行顺序

一层装饰器

# -*- 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

# 第二步执行的时候从内向外,逐层执行
上一篇:Linux环境VNC服务安装、配置与使用


下一篇:Python机器学习算法入门之梯度下降法实现线性回归