Python 装饰器给你的函数穿件隐身衣

Python基础 Nov 24, 2025

装饰器是什么鬼?

如果你看过一些 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),把原函数包了一层,加上了计时功能。

🎯 装饰器的三大用途

  1. 日志记录——自动记录谁调用了什么函数
  2. 权限校验——Flask/Django 里的 @login_required
  3. 缓存——@functools.lru_cache 一键缓存递归结果

记住:装饰器就是函数的“马甲”。穿上它,你的函数就变强了,但你还是你。

Tags