首页 > 编程语言 >python中多装饰器执行顺序

python中多装饰器执行顺序

时间:2022-10-20 13:33:20浏览次数:49  
标签:顺序 yo python say hi func print 装饰 中多

python中会遇到被多个装饰器装饰,那么这几个装饰器的执行顺序是如何的呢?下面通过函数装饰器装饰函数的例子来说明下。

 1 def say_hi(func):
 2     def wrapper(*args,**kwargs):
 3         print("HI")
 4         ret = func(*args,**kwargs)
 5         print("BYE")
 6         return ret
 7 
 8     return wrapper
 9 
10 
11 def say_yo(func):
12     def wrapper(*args,**kwargs):
13         print('yo')
14         ret = func(*args,**kwargs)
15         return ret
16     return wrapper
17 
18 # 加载顺序是由下而上  实际上  func = say_hi(say_yo(func))
19 @say_hi   # func = say_hi(func)
20 @say_yo   # func = say_yo(func)
21 def func():
22     print('hello world')
23 func()

  # 执行结果
  # HI
  # yo
  # hello world
  # BYE

  网上说装饰器加载顺序是由下向上,执行顺序是由上向下。个人觉得不太好理解,其实只要将多个装饰器装饰的本质罗列下,比如上述代码中2个装饰器装饰了func函数,转换下就是:func = say_hi(say_yo(func))。

  首先,可以将say_yo(func)看成一个参数,传递到say_hi()中,那么看下执行顺序。先回执行下print('HI'),然后say_yo(func)就是say_hi中的func函数,func(*args,**kwargs),也就是say_yo(func)(),执行say_yo函数,将被装饰的func函数传递到say_yo函数中,那么就先执行print(“yo”),然后执行被装饰的func函数,就print('hello world") 。最后say_hi中的func()执行完毕后,后面还要执行下print("BYE"),至此就结束了。

  所以,总结下:只要将多个装饰器还原成本质的状态去理解就比较清晰了。记录下。

 

标签:顺序,yo,python,say,hi,func,print,装饰,中多
From: https://www.cnblogs.com/shaoyishi/p/16809549.html

相关文章

  • python 常用的字符串处理函数
    find()  功能:检测字符串是否包含特定字符,如果包含,则返回开始的索引;否则返回-1##find()函数str='helloworld'#'wo'在字符串中print(str.find('wo'))#'wc'......
  • Python第六章
    实例一:输出每日一贴(共享版) 代码如下:deffunction_tips():'''功能:每天输出一条励志文字'''importdatetime#导入日期时间类#定义一......
  • Python第六章实例、实战
    0102  03  04    05    06   实战1     s2    s3    s4   ......
  • Python实验报告——第6章 函数
    实验报告实例01:输出每日一帖(共享版)代码如下:deffunction_tips():'''功能:每天输出一条励志文字'''importdatetime#导入日期时间类#定义......
  • python实验报告(函数)
    1.输出每日一站(共享版)  结果:   2.根据身高,体重计算BMI指数  结果:  3.根据身高,体重计算BMI指数  结果:  4.模拟结账功能———计算实付金......
  • Python环境配置保姆教程(Anaconda、Jupyter、GPU环境)!
    作者:吴永强,东北大学,Datawhale团队成员1.写在前面搞算法的同学也都明白,一个比较完美的python环境是多么的重要。这篇文章打算把一些必备的python环境配置过程记录下来,这样不......
  • 学习python-Day77
    今日学习内容一、⽬录结构说明1.⽬录结构发展过程一块盘:根目录二块盘:/usr目录继续扩展>>>:FHS文件系统目录规范2.重要目录数据信息说明网卡配置文件 /etc/sysc......
  • 使用python读取doc、docx文档
    1.读取docx需要使用python-docx(1)安装python-docxpython-mpipinstallpython-docx(2)读取docximportdocxdocument=docx.Document("D:/资料/me/AA.docx")#......
  • Python第五章
    1、实例1:使用字符串拼接输出一个关于程序员的笑话代码:programmer_1='程序员甲:搞IT太辛苦了,我想换行……怎么办?'programmer_2='程序员乙:敲一下回车键'print(progra......
  • python当中自定义上下文管理器
    在python当中,我们知道with的用法,是一种上下文管理机制。比如withopen(file,'w')asf: 这种方法下,就集成了open和close.我们也可以自定义一个上下文管理器。方法一:c......