大家好,我是正在实战各种AI项目的程序员晚枫。
今天聊一个让Python代码瞬间变高级的特性——装饰器(Decorator)。
第一次听说这个词时,我以为是什么高深的东西。后来才发现,它就像给手机贴膜一样简单:在不改变原函数的情况下,给它加上新功能。
看完这篇文章,你也能写出带@符号的”高端代码”。
从一个实际需求开始
假设你有10个函数,想统计每个函数运行了多长时间。
笨方法(复制粘贴10次)
1 | import time |
缺点:代码重复、维护困难、容易漏改。
聪明方法(用装饰器)
1 | import time |
只需在函数前加@timer,自动拥有计时功能!
装饰器原理:其实就是一个函数
不要被@符号吓到,装饰器本质上就是接收函数作为参数,返回新函数的函数。
拆解来看
1 | def my_decorator(func): |
@就是语法糖,让代码更优雅。
带参数的装饰器
上面的例子有个问题:如果原函数有参数怎么办?
万能版本(支持任意参数)
1 | import time |
记住这个模板,90%的场景都能用!
常用装饰器示例
1. 权限检查
1 | def require_login(func): |
2. 缓存结果
1 | def memoize(func): |
3. 重试机制
1 | import time |
多个装饰器叠加
可以同时使用多个装饰器,顺序是从下往上执行:
1 |
|
推荐:AI Python零基础实战营
想深入学习Python高级特性?
课程内容:
- ✅ Python基础语法
- ✅ 函数与面向对象
- ✅ 装饰器、生成器、上下文管理器
- ✅ 实战项目练习
🎁 限时福利:送《Python编程从入门到实践》实体书
👉 点击了解详情
相关阅读
PS:装饰器是Python的”黑魔法”之一,掌握它,你的代码会简洁又强大。记住核心:不修改原函数,给它加功能。
