Python 装饰器
装饰器简述
装饰器(decorator),又称“装饰函数”,即一种返回值也是函数的函数,可以称之为“函数的函数”。其目的是在不对现有函数进行修改的情况下,实现额外的功能。最基本的理念来自于一种被称为“装饰模式”的设计模式。在 Python 中,装饰器属于纯粹的“语法糖”,不使用也没关系,但是使用的话能够大大简化代码,使代码更加易读。装饰器可以基于函数实现也可以基于类实现,两种实现的装饰器使用方法基本固定,使用装饰器步骤如下:
- 定义装饰函数(类)
- 定义业务函数
- 业务函数调用装饰函数
装饰器案例
案例1、不改动业务函数基础上增加新功能
def decorator_demo1(func): '''装饰器函数''' def inner(): func() print('这是添加的新功能!!!') return inner # @decorator_demo1 等同与 f1 = decorator_demo1(f1) @decorator_demo1 def f1(): '''业务函数''' print('''This is f1()''') @decorator_demo1 def f2(): '''业务函数''' print('''This is f2()''')
效果
This is f1() 这是添加的新功能!!! This is f2() 这是添加的新功能!!!
Python 支持多个装饰器同时使用
def decorator_demo01(func): '''装饰器1''' def inner(): print('this is decorator_demo01') return f"<b> {func()} </b>" return inner def decorator_demo02(func): '''装饰器2''' def inner(): print('this is decorator_demo02') return f"<b> {func()} </b>" return inner @decorator_demo01 @decorator_demo02 def f1(): '''业务函数''' print("this is f1") return "hello world" res = f1() print(res)
运行效果
this is decorator_demo01 this is decorator_demo02 this is f1 <b> <b> hello world </b> </b>
案例2、带参装饰器
def decorator_demo01(f1): '''装饰器''' print("-正在装饰-") def inner(a, b): print("正在验证") f1(a, b) return inner @decorator_demo01 def f1(a, b): '''业务函数''' print(a + b) f1(0, 5 )
输出
-正在装饰-
正在验证
5
案例3、通用装饰器
def decorator_demo01(func): '''装饰器''' def inner(*args, **kvargs): print('logging') res = func(*args, **kvargs) # 保留返回数据 return res # 返回调用信息 return inner @decorator_demo01 def test1(): '''无参函数''' print("this is test1 No args") @decorator_demo01 def test2(): '''无参函数''' print("this is test2 No args") return "This's test2 return info" @decorator_demo01 def test3(info): '''无参函数''' print(f"this is test3 tith args {info}") res1 = test1() print(res1) res2 = test2() print(res2) res3 = test3("hello test3") print(res3)
输出
logging this is test1 No args None logging this is test2 No args This's test2 return info logging this is test3 tith args hello test3 None
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix