Python装饰器的原理详解

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

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

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

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

装饰器函数的逻辑流程

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

这就是装饰器的灵魂设计

例子:

语法糖写法(优雅)

@my_decorator

def func():

pass

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

func = my_decorator(func)

  • 执行时机:函数定义时,Python 解释器自动执行转换,不是函数调用时
  • 本质:把原函数func传给my_decorator,用返回的新函数覆盖原函数名
相关推荐
星云穿梭5 小时前
用Python写一个带图形界面的学生管理系统——完整教程
python
金銀銅鐵6 小时前
用 Pygame 实现 15 puzzle
python·数学·游戏
黄忠11 小时前
大模型之LangGraph技术体系
python·llm
hboot1 天前
AI工程师第二课 - 数据处理
人工智能·python·数据分析
用户8356290780511 天前
使用 Python 自动化 PowerPoint 形状布局与格式设置
后端·python
用户8356290780511 天前
用 Python 自动化 PowerPoint 演讲者备注添加
后端·python
黄忠2 天前
01-系统架构设计-LangGraph状态机与多源异构RAG
python
zzzzzz3102 天前
假如我是掘金管理员,我先给评论区装个'代码审查'系统
python·程序员·机器人
砍材农夫2 天前
python环境|conda安装和使用(2)
后端·python
程序员龙叔2 天前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试