你可能不知道的Python装饰器

今天才发现装饰器的另一种用法,下面就先上代码:

洪洞网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联建站自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

 
 
 
  1. data_list = [] 
  2.  
  3.  
  4. def data_item(func): 
  5.     data_list.append(func) 
  6.     return func 
  7.  
  8.  
  9. @data_item 
  10. def foo(): 
  11.     return 1 
  12.  
  13.  
  14. @data_item 
  15. def foo1(): 
  16.     return 2 
  17.  
  18.  
  19. @data_item 
  20. def foo3(): 
  21.     return 3 
  22.  
  23.  
  24. def max_item(): 
  25.     result = max(i() for i in data_list) 
  26.     return result 
  27.  
  28.  
  29. if __name__ == '__main__': 
  30.     item = max_item() 
  31.     print(item) 

代码很简单就是,定义三个foo开头的函数,每个foo函数输出不一样的数字,都通过装饰器data_item进行修饰,最后通过max_item函数,执行一系列逻辑获取结果。

这里有个容易被忽略的点,那就是装饰器实际是在执行 max_item()之前就执行了。

所以,如果你打印下data_list你会发现它是有值的。

 
 
 
  1. [

即列表里面已经有三个被装饰器修饰的函数了,然后在

 
 
 
  1. max(i() for i in data_list) 

的i()阶段这三个函数执行了,得到了结果(1,2,3),然后最后取它们的max值即3。

什么场景会用到呢,一般对于传入一个值然后多种处理方案,选择其中优秀方案的时候可以考虑使用这种方法。

emmm,装饰器还是挺有意思的。

当前标题:你可能不知道的Python装饰器
当前URL:http://www.shufengxianlan.com/qtweb/news12/164762.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联