Python装饰器:给你的函数穿上花裤衩

Python基础 Mar 18, 2020

装饰器到底是什么?

想象一下:你有一条普通的牛仔裤,但你想让它变成抖音上那种会发光的花裤袍。你不需要重新做一条裤子——你只需要“装饰”一下。Python 装饰器干的就是这事儿:在不改动原函数代码的情况下,给它加点料。

def 发光裤袍(func):
    def 裹上(*args, **kwargs):
        print("✨ 开启闪耀模式 ✨")
        return func(*args, **kwargs)
    return 裹上

@发光裤袍
def say_hello():
    print("Hello World!")

say_hello()

@语法糖?其实就是个语法糖

很多人看到 @decorator 就慌,其实它等价于 func = decorator(func)。对,就这么简单。就像你女朋友跟你说“没事”——根据上下文分析,它其实等价于“你有麻烦了”。

实用场景:日志、计时、权限检查

import time

def 计时器(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} 跑了 {time.time()-start:.3f} 秒")
        return result
    return wrapper

@计时器
def 慢吞吞的函数():
    time.sleep(1)
    return "终于跑完了"

带参数的装饰器:进一步玩出花

def log(level="INFO"):
    def decorator(func):
        def wrapper(*args, **kwargs):
            print(f"[{level}] 调用了 {func.__name__}")
            return func(*args, **kwargs)
        return wrapper
    return decorator

@log(level="WARNING")
def 危险操作():
    print("⡰ 你正在做一件危险的事!")

总结

装饰器就是 Python 里的 AOP(面向切面编程),让你把横切关注点(日志、权限、u7f13存等等)从业务逻辑中抽离出来。一句话总结:函数还是那个函数,但穿上花裤袍之后,它更秀了

Tags