Python中多重装饰器执行顺序(由下至上)

栏目: Python · 发布时间: 7年前

内容简介:Python中多重装饰器执行顺序(由下至上)
 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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员成长的烦恼

程序员成长的烦恼

吴亮、周金桥、李春雷、周礼 / 华中科技大学出版社 / 2011-4 / 28.00元

还在犹豫该不该转行学编程?还在编程的道路上摸爬滚打?在追寻梦想的道路上你并不孤单,《程序员成长的烦恼》中的四位“草根”程序员也曾有过类似的困惑。看看油田焊接技术员出身的周金桥是如何成功转行当上程序员的,做过钳工、当过外贸跟单员的李春雷是如何自学编程的,打小在486计算机上学习编程的吴亮是如何一路坚持下来的,工作中屡屡受挫、频繁跳槽的周礼是如何找到出路的。 《程序员成长的烦恼》记录了他们一步一......一起来看看 《程序员成长的烦恼》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具