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

data_list = []

def data_item(func):
data_list.append(func)
return func @data_item
def foo():
return 1 @data_item
def foo1():
return 2 @data_item
def foo3():
return 3 def max_item():
result = max(i() for i in data_list)
return result if __name__ == '__main__':
item = max_item()
print(item)

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

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

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

[<function foo at 0x10bb05ea0>, <function foo1 at 0x10bb05d90>, <function foo3 at 0x10bb05f28>]

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

 max(i() for i in data_list)

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

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

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

最新文章

  1. 2016.9.27 --- changchun
  2. oracle 取前10条记录
  3. opencv8-GPU之相似性计算
  4. map,list
  5. html base1
  6. Cookie的格式及组成
  7. replicated mode vs global mode - 每天5分钟玩转 Docker 容器技术(105)
  8. c语言基础学习07_关于指针的复习
  9. WPF自学入门(十一)WPF MVVM模式Command命令
  10. JavaScript splice() 、slice() 方法
  11. Windows10上搭建Kinect 2 开发环境
  12. python 数据分析3
  13. Kafka笔记2(安装)
  14. FlexRay笔记
  15. C# 深拷贝和浅拷贝
  16. Css_button样式对不齐
  17. spring Boot的配置
  18. CentOS 6.5环境下配置Arcgis Server 10.3
  19. a标签、img图片、iframe、表单元素、div
  20. 浏览器根对象window之值为字符串的属性

热门文章

  1. Linux Shell 小数比较
  2. pom中添加插件打包上传源码
  3. Linux下 启动tomcat 时候同时日志命令
  4. 关于MQ的几件小事:消息队列的用途、优缺点、技术选型
  5. 远程桌面远程代码执行漏洞(CVE-2019-0708)Poc
  6. Vue项目中自动将px转换为rem
  7. pdftk - handy tool for manipulating PDF 免费的pdf合并工具
  8. 小a的排列(牛客)
  9. test20190729 夏令营NOIP训练14
  10. 「AHOI / HNOI2017」礼物