如何写装饰器
函数装饰器,可以在不改变原来的函数的情况下,在原来的函数的前面或者后面添加动作。
Do something before
原来的函数动作
Do something after
基本流程如下:
1. 首先定义要添加的功能函数
def 装饰的函数(参数,此参数用来传入正常函数的函数名)
def WraptheFunction()
do something before
参数()
do something after
retrun WraptheFunc
注意此次 return 的函数名,不带()
2. def 正常工作的函数()
正常函数的动作
3. 在正常函数之前添加
@ 装饰的函数
def a_new_func(func_name) def WraptheFunc() print ("do something before") func_name() print("do something after") return WraptheFunc @a_new_func def normal_func(): print("I am working normal...")
normal_func()
1. 遇到 @ a_new_func,把@下面的函数名(normal_func)作为参数传入到 a_new_func中去。即 “normal_func” ----> “func_name”
2. 把装饰器中定义的函数名去代替被装饰函数的函数名。即"WraptheFunc" ---> "normal_func"
装饰器使用蓝本:
注意:@wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性。
from functools import wraps def decorator_name(f): @wraps(f) def decorated(*args, **kwargs): if not can_run: return "Function will not run" return f(*args, **kwargs) return decorated @decorator_name def func(): return("Function is running") can_run = True print(func()) # Output: Function is running can_run = False print(func()) # Output: Function will not run
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 想让你多爱自己一些的开源计时器
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析