当前位置:首页>python>python基础-装饰器

python基础-装饰器

  • 2026-09-05 18:04:05
python基础-装饰器

记忆总结:

装饰器 = 给函数添加装饰,不改动函数本身,额外加功能。


1、什么是装饰器?

本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。以下是简单的装饰器示例:

# 装饰器的测试!def ff(fun):    def wrapper():        print("------- start加强 ---------")        fun()        print("------- end加强 ---------")    return wrapperdef f1():    print("f1执行了.....")# 把f1函数传递到ff函数中:包装执行!!!xx = ff(f1)xx()
语法糖用法:就是自动帮你把函数传给装饰器
def haha(fun):    def wrapper():        print("------- start加强 ---------")        fun()        print("------- end加强 ---------")    return wrapper# 🔥 这里加 @ff 就是语法糖!等价于 ff(f1)@hahadef f1():    print("f1执行了.....")# 直接调用 f1() 就行!不用 xx = ff(f1)f1()
装饰器到底干了什么?

调用 f1() 时:

  • 先执行装饰器里的 wrapper
  • wrapper 里先做额外功能
  • 再调用原来的 f1
  • 最后再做收尾功能
2、带参数的装饰器(理解好,就很简单)
  • 普通装饰器:2 层函数   
  • 带参数装饰器:3 层函数
    • 外层:接收装饰器参数 
    • 中层:接收原函数
    • 内层:执行原函数 + 加功能
# 🔥 带参数的装饰器(三层函数)def outer(msg):  # 第一层:接收参数执行返回装饰器!    def middle(func):  # 第二层:普通装饰器,接收原函数        def wrapper():  # 第三层:真正包装            print(f"--- {msg} ---")  # 使用装饰器传的参数            func()  # 执行原函数        return wrapper    return middle# ------------------- 使用 -------------------@outer("我是装饰器传进来的参数!") # 理解为:outer()执行完毕返回函数middledef f1():    print("f1 执行了")f1()
直观理解: @outer("我是装饰器传进来的参数!") 
@outer("我是装饰器传进来的参数!")  # 理解为:outer()执行完毕返回函数middle相当于如下:@middledef f1():    print("f1 执行了")

    最新文章

    随机文章