装饰器的概念
Python 的装饰器(Decorator)是一种用于修改或扩展原有函数功能的语法糖。它可以在不改变原函数代码的情况下,通过将函数作为参数传递给另一个函数来实现函数的增强。
装饰器是一个闭包函数,通过接收一个函数作为参数,并返回一个新的函数对象来对该函数进行扩展。在返回的新函数中,我们可以添加额外的代码、执行前/后的处理、异常处理、缓存数据等功能。
常见的 Python 装饰器的使用场景包括:
- 记录函数运行时间、调用次数等统计信息
- 实现函数的授权、身份验证等访问控制功能
- 实现函数输入输出参数的类型检查、校验、转换等
- 动态地修改函数的调用方式、返回值、异常处理等
- 实现缓存机制,提高函数的执行效率
使用代码实现以及理解
实现1(这里的装饰器在fun上面@的时候仅仅有一个参数fun)
def dec(func): # 这个函数接受的参数来自fun def wrapper(*args): print("wrapper", args) # 我们必须自己调用 func,因此装饰器对应的函数的逻辑等的调用全部集中在了这里 return func(*args) # 返回 func 函数的返回值 return wrapper # 一般情况下,装饰器仅仅有下面的这个fun来作为参数 @dec def fun(*args): print("call fun", args) return sum(args) # 调用被装饰器装饰的函数,这点的逻辑 print(fun(1, 2, 3))
实现2(这里的装饰器在fun上面@传递自己的参数
def dec_params(*args, **kw): print(args, kw) def dec(func): # 这个函数接受的参数来自fun def wrapper(*args_fun): print("wrapper", args_fun) # 我们必须自己调用 func 因此装饰器对应的函数的逻辑等的调用全部集中在了这里 return func(*args_fun) return wrapper return dec # 给装饰器函数传参数 @dec_params(1, 2, 3) def fun(*args): print("call fun", args) # 计算 args 的和 return sum(args) print(fun(-1, 1))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步