装饰器基础知识

一、概述

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

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

@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))。

相关推荐

  1. 装饰基础知识

    2023-12-06 19:22:03       61 阅读
  2. python函数装饰基础

    2023-12-06 19:22:03       62 阅读
  3. python类装饰基础

    2023-12-06 19:22:03       53 阅读
  4. python装饰嵌套基础

    2023-12-06 19:22:03       60 阅读
  5. 8 个必须要知道的Python装饰

    2023-12-06 19:22:03       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 19:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 19:22:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 19:22:03       82 阅读
  4. Python语言-面向对象

    2023-12-06 19:22:03       91 阅读

热门阅读

  1. 使用QT实现的RSS新闻阅读器

    2023-12-06 19:22:03       54 阅读
  2. cesium 之小问题大学问记录

    2023-12-06 19:22:03       70 阅读
  3. 分支与循环(三)

    2023-12-06 19:22:03       41 阅读
  4. 精调llama模型

    2023-12-06 19:22:03       54 阅读
  5. git基础

    2023-12-06 19:22:03       52 阅读
  6. ubuntu22安装vmtool正确姿势

    2023-12-06 19:22:03       48 阅读
  7. win11 ssh连接ubuntu 出现 command not found: cvs

    2023-12-06 19:22:03       47 阅读
  8. LeetCode289. Game of Life

    2023-12-06 19:22:03       47 阅读
  9. 【矩阵】73. 矩阵置零

    2023-12-06 19:22:03       56 阅读
  10. API开发工具的特点与应用场景

    2023-12-06 19:22:03       50 阅读