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

装饰器原理、手写装饰器、带参装饰器、装饰器嵌套全解

博客导语

装饰器底层=高阶函数+闭包,遵循开闭原则:不修改原函数代码、不修改调用方式,动态扩展功能。面试必考四大形态:无参、传参兼容、带参装饰器、多层嵌套,同时解决函数签名丢失经典坑。


一、基础无参装饰器(原生手写)

@装饰器是语法糖,等价于func = wrapper(func)

def log_decorator(func): # 内层闭包函数 def inner(*args,**kwargs): print("函数开始执行") ret = func(*args,**kwargs) # 执行原函数 print("函数执行结束") return ret return inner @log_decorator def add(a,b): return a+b add(1,2)

二、修复函数签名丢失

直接装饰后add.__name__会变成inner,导致日志、异常栈错乱,必须用wraps修复

from functools import wraps def log_decorator(func): @wraps(func) def inner(*args,**kwargs): ... return inner

三、带参数装饰器(三层嵌套)

场景:装饰器需要传入自定义参数,例如自定义日志前缀、超时时间,需要三层函数

def log_prefix(prefix): # 第一层接收装饰器参数 def outer(func): @wraps(func) def inner(): print(f"[{prefix}]函数执行") func() return inner return outer @log_prefix("INFO") def hello(): print("hello")

四、装饰器嵌套执行顺序

从上到下装饰,从下到上执行。外层装饰器先包裹内层;执行时内层前置逻辑先运行,外层后置逻辑先运行。


五、生产使用场景

接口权限校验、接口耗时统计、日志埋点、缓存击穿、异常统一捕获

http://www.rkmt.cn/news/1527429.html

相关文章:

  • 深入Vitis平台工程:从‘fatal error: xxx.h’报错理解BSP的Makefile机制
  • 2026年智能电磁流量计口碑解析:耐用性与工程适配深度评测 - 优质品牌商家
  • 网络内容安全与合规创作指南:技术博主的红线意识
  • GitLab启动慢到怀疑人生?别急着重启,先看看你的服务器内存够不够
  • 告别玄学调网:用示波器给STM32H743的RMII接口做一次“体检”(附LAN8720A实测波形)
  • STM32串口接收中断‘幽灵’BUG排查实录:从ORE标志位到彻底关闭中断的实战
  • 从水仙花数到八位自幂数:用Python和C++探索‘自幂数’家族的奥秘
  • 2026永城奔驰宝马奥迪维修靠谱的门店推荐 - 品牌排行榜
  • 从Good到Bad:深入理解OPC UA状态码背后的设计哲学与最佳实践
  • 从‘镜子’到‘智能画笔’:一文看懂RIS(可重构智能超表面)如何重塑无线信号
  • 从Alpha到Beta:一次讲透软件发布前的用户测试,别再傻傻分不清了
  • CANN神经网络算子库ops-nn完全指南:昇腾NPU上神经网络算子的分类体系、调用接口与性能特征详解
  • D3KeyHelper暗黑3鼠标宏工具:5分钟上手,解放双手冲层150层的终极指南
  • PyCharm里装不上HuggingFace Datasets?可能是你的Python解释器‘打起来了’
  • 别让编码坑了你!彻底解决IntelliJ IDEA里application.yml中文乱码和启动报错
  • HFSS仿真报错别慌!手把手教你搞定‘Acis error’和‘Simulation completed with execution error’
  • Nginx反向代理遇到403?别慌,可能是这个Origin请求头在捣鬼(附排查步骤)
  • PotPlayer美化(电脑)
  • CANN机器视觉算子库ops-cv零基础入门实战指南:从开发环境配置到图像预处理算子调用与目标检测调优全流程
  • Go语言简历怎么写?从零经验到社招上岸,我用这3个技巧让HR主动联系
  • 避开STM32H7网络开发的坑:CubeMX配置LWIP时,LAN8720A这三个引脚上下拉千万别设错
  • 2026年6月有名的Moldflow企业推荐,Moldex3D/模具模流分析,Moldflow厂商有哪些 - 品牌推荐师
  • 2026年亲子体验茶园产业深度解析:从苍山秘境到全链生态,四时春茶业如何构建差异化竞争力? - 优质品牌商家
  • FPGA做FFT时,你的数据对齐了吗?手把手解决锯齿波频谱分析中的幅值相位误差
  • 从一次应急响应看致远OA wpsAssistServlet漏洞:攻击者如何上传WebShell及如何排查
  • 山东大学项目实训个人纪实(6)——降低唇形同步性能需求
  • 2026年光伏围栏网厂家怎么选?7家实力企业横向对比与采购指南 - 优质品牌商家
  • 避坑指南:在AT32F403A上配置8串口中断,这些细节千万别忽略
  • 【Springboot毕设全套源码+文档】基于vue+springboot高校校友信息管理系统的设计与开发(丰富项目+远程调试+讲解+定制)
  • 避开噪声坑:用ETA6002给锂电池充电,你的后级电路真的安全了吗?