Python装饰器:给你的函数穿上花裤衩
装饰器到底是什么?
想象一下:你有一条普通的牛仔裤,但你想让它变成抖音上那种会发光的花裤袍。你不需要重新做一条裤子——你只需要“装饰”一下。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存等等)从业务逻辑中抽离出来。一句话总结:函数还是那个函数,但穿上花裤袍之后,它更秀了。