Python 装饰器给你的函数穿件隐身衣
装饰器是什么鬼?
如果你看过一些 Python 代码,可能会见到这种神奇的“@表情”:
@login_required
def dashboard(request):
return "欢迎回来,大佬"这个 @login_required 就是装饰器。简单来说,装饰器就是一个“给函数加 buff”的语法糖——就像你在游戏里捡到一个装备,不用改角色本身,攻击力就翻倍了。
🛠 手搓一个装饰器
装饰器的本质很简单:一个接收函数、返回新函数的函数。
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"{func.__name__} 跑了 {time.time()-start:.3f} 秒")
return result
return wrapper看到没?@timer 等价于 slow_function = timer(slow_function),把原函数包了一层,加上了计时功能。
🎯 装饰器的三大用途
- 日志记录——自动记录谁调用了什么函数
- 权限校验——Flask/Django 里的 @login_required
- 缓存——@functools.lru_cache 一键缓存递归结果
记住:装饰器就是函数的“马甲”。穿上它,你的函数就变强了,但你还是你。