您当前的位置: 首页 >  Python

彭世瑜

暂无认证

  • 0浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python多层装饰器执行顺序

彭世瑜 发布时间:2019-12-07 22:55:28 ,浏览量: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

# 第二步执行的时候从内向外,逐层执行
关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.1806s