Python装饰器的原理详解

Python 中函数和普通变量完全等价:

  • 可以赋值给变量 :a = print → a("hello") 等价于 print("hello")
  • 可以作为参数传递
  • 可以作为返回值
  • 可以嵌套定义:在函数内部再定义函数

这是装饰器能发挥作用的根本前提。

@装饰器就是一个语法糖,本质 上就是接收一个函数作为参数,并且返回一个新函数的高阶函数,从而实现不修改原函数,却给函数加新功能。

装饰器函数的逻辑流程

  • 接收旧函数:装饰器作为高阶函数,接收被装饰的原函数
  • **内部创建一个包装函数:**在装饰器内部定义一个包装函数,新增想要实现的函数功能
  • 再在包装函数里面调用旧函数:对旧函数进行装饰
  • 返回装饰后的新函数:替换原函数(新旧函数名不变)

这就是装饰器的灵魂设计

例子:

语法糖写法(优雅)

@my_decorator

def func():

pass

完全等价的原生写法(啰嗦)

func = my_decorator(func)

  • 执行时机:函数定义时,Python 解释器自动执行转换,不是函数调用时
  • 本质:把原函数func传给my_decorator,用返回的新函数覆盖原函数名
相关推荐
Pniubi3 小时前
HashMap的扩容和树化边界
java·开发语言
XCDoris4 小时前
郴州logo设计机构
大数据·人工智能·python
gCode Teacher 格码致知5 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工5 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留5 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu6 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
马良神笔6 小时前
2026 年Rag最近技术前沿总结
后端·python·django
不像程序员的程序媛6 小时前
maven基础
python·pycharm·maven
益莱储中国7 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
xiaogai_gai7 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python