Python 装饰器:给你的函数“包个包装”
你是否想过,在不修改原有代码的情况下,给函数添加新功能?Python的装饰器正是为此而生。它就像给礼物包上包装纸——礼物本身没变,但外观和体验升级了。
什么是装饰器?
装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。这种“函数套函数”的模式,让你能轻松实现日志记录、性能测试、权限校验等通用功能。
动手写个简单装饰器
def logger(func):
def wrapper(*args, **kwargs):
print(f"开始执行 {func.__name__}")
result = func(*args, **kwargs)
print(f"{func.__name__} 执行完毕")
return result
return wrapper
@logger
def say_hello(name):
print(f"你好,{name}!")
say_hello("世界") # 自动记录执行日志
带参数的装饰器
通过再包一层函数,装饰器也能接收参数:
def repeat(times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(times):
func(*args, **kwargs)
return wrapper
return decorator
@repeat(3)
def greet():
print("Hello!")
为什么值得学习?
装饰器体现了Python的优雅哲学。它减少了重复代码,让核心逻辑保持简洁。Flask的路由@app.route('/')、Django的登录校验@login_required,都是装饰器的经典应用。
掌握装饰器,你会更懂Python的“语法糖”之美——复杂功能也能写得如此简洁明了。