Python中多重装饰器执行顺序(由下至上)
2018-06-18 00:49:36来源:未知 阅读 ()
1 def decorator_a(func):#这里是把f作为参数传入 2 print('Get in decorator_a') 3 4 def inner_a(*args, **kwargs): 5 print('Get in inner_a') 6 return func(*args, **kwargs) #这里调用的是f 最终执行的函数 7 8 return inner_a 9 10 11 def decorator_b(func): #这里是把inner_a 作为参数传入 12 print('Get in decorator_b') 13 14 def inner_b(*args, **kwargs): 15 print('Get in inner_b') 16 return func(*args, **kwargs) #这里调用的是inner_a 17 18 return inner_b #此时f=inner_b 19 20 #多重装饰器 相当于函数连锁赋值 注意区别函数和函数调用的区别 21 @decorator_b 22 @decorator_a 23 def f(x): 24 print('Get in f') 25 return x * 2 26 27 28 print(f(1))
注:主要代码解释在注释中
引用:
当解释器执行下面这段代码时,实际上按照从下到上的顺序已经依次调用了 decorator_a
和 decorator_b
,这是会输出对应的 Get in decorator_a
和 Get in decorator_b
。 这时候 f
已经相当于 decorator_b
里的 inner_b
。但因为 f
并没有被调用,所以 inner_b
并没有调用,依次类推 inner_b
内部的 inner_a
也没有调用,所以 Get in inner_a
和 Get in inner_b
也不会被输出。
然后最后一行当我们对 f
传入参数1进行调用时, inner_b
被调用了,它会先打印 Get in inner_b
,然后在 inner_b
内部调用了 inner_a
所以会再打印 Get in inner_a
, 然后再 inner_a
内部调用的原来的 f
, 并且将结果作为最终的返回。这时候你该知道为什么输出结果会是那样,以及对装饰器执行顺序实际发生了什么有一定了解了吧。
代码来源:https://www.cnblogs.com/nisen/p/6193426.html?utm_source=itdadao&utm_medium=referral
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash