Python多层装饰器执行顺序
  TEZNKK3IfmPf 2023年11月15日 16 0


一层装饰器

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

# 第二步执行的时候从内向外,逐层执行



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

TEZNKK3IfmPf