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("fun...
一层装饰器
# -*- 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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
两层装饰器
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
# 第二步执行的时候从内向外,逐层执行
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/103440691
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)