当前位置: 首页 > news >正文

装饰器基础知识

一、概述

装饰器是可调用的对象,其参数是另一个函数(被装饰的函数)。装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。
装饰器的一大特性是,能把被装饰的函数替换成其他函数。第二个特性是,装饰器在加载模块时立即执行。

运用装饰器可以在函数进入和退出时,执行特定的操作,比如插入日志,性能测试,缓存,权限校验等场景。有了装饰器,就可以抽离出大量与函数功能无关的重复代码。

@decorate
def target( ):print('running target( )')

等价于

def target( ):print('running target( )')
target = decorate(target)

二、lru_cache装饰器

functools.lru_cache是非常实用的装饰器,它实现了备忘(memoization)功能。这是一项优化技术,它把耗时的函数的结果保存起来,避免传入相同的参数时重复计算。LRU三个字母是“Least Recently Used”的缩写,表明缓存不会无限制增长,一段时间不用的缓存条目会被扔掉。

特别要注意,lru_cache可以使用两个可选的参数来配置。maxsize参数指定存储多少个调用的结果。缓存满了之后,旧的结果会被扔掉,腾出空间。为了得到最佳性能,maxsize应该设为2的幂。typed参数如果设为True,把不同参数类型得到的结果分开保存,即把通常认为相等的浮点数和整数参数(如1和1.0)区分开.

三、叠放装饰器

把@d1和@d2两个装饰器按顺序应用到f函数上,作用相当于f=d1(d2(f))。

http://www.lryc.cn/news/254190.html

相关文章:

  • 轻量封装WebGPU渲染系统示例<42>- vsm阴影实现过程(源码)
  • [Electron] 将应用日志文件输出
  • 特性【C#】
  • 理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
  • 【微服务】分布式限流如何实现
  • 【S32K3环境搭建】-0.3-S32DS安装实时驱动RTD(Real-Time Driver)
  • 软件设计之适配器模式
  • 虚拟化逻辑架构:OVS 交换机与端口管理
  • 【springboot】idea项目启动端口被占用
  • linux环境下编译安装OpenCV For Java(CentOS 7)
  • 健康学习到 150 岁:人体系统调优不完全指南 | 开源日报 No.93
  • C++ Easyx 三子棋
  • [NAND Flash 2.1] NAND Flash 闪存改变了现代生活
  • 2015年五一杯数学建模B题空气污染问题研究解题全过程文档及程序
  • java面试题,上楼梯有多少种方式
  • 8.HTTP工作原理
  • 环境部署的学习笔记(Docker)
  • Navicat在分辨率不同的屏幕窗口显示大小不一致问题解决
  • 通过代码搞明白JAVA中值传递和引用传递
  • ambari 开启hdfs回收站机制
  • 服务器数据恢复—服务器重装系统导致逻辑卷发生改变的数据恢复案例
  • 软件工程之架构设计
  • oracle java.sql.SQLException: Invalid column type: 1111
  • Mac 浏览器下载的文件名总是「乱码」
  • Redis Reactor事件驱动模型源码
  • cv2.error: OpenCV(4.7.0)
  • 10.vue3项目(十):spu管理页面的sku的新增和修改
  • Java LeetCode篇-深入了解二叉树经典解法(三种方式实现:获取二叉树的最大深度)
  • Image Segmentation Using Deep Learning: A Survey
  • 可视化开源编辑器Swagger Editor本地部署并实现远程访问管理编辑文档