什么是装饰器?
装饰器是Python中的高级特性,它允许你在不修改原函数代码的情况下,给函数添加额外功能。
最简单的装饰器
def my_decorator(func):
def wrapper():
print('装饰器开始执行...')
func()
print('装饰器执行完毕!')
return wrapper
@my_decorator
def say_hello():
print('Hello, World!')
say_hello()
装饰带参数的函数
def my_decorator(func):
def wrapper(*args, **kwargs):
print(f'调用函数: {func.__name__}')
result = func(*args, **kwargs)
return result
return wrapper
@my_decorator
def add(a, b):
return a + b
实用案例:计时器
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f'{func.__name__} 耗时: {end - start:.4f}秒')
return result
return wrapper
@timer
def slow_function():
time.sleep(1)
return 'done'
实用案例:登录验证
def login_required(func):
def wrapper(*args, **kwargs):
if not is_logged_in():
raise PermissionError('请先登录')
return func(*args, **kwargs)
return wrapper
@login_required
def view_profile():
return '这是个人资料页'
装饰器链
def bold(func):
return lambda: f'<b>{func()}</b>'
def italic(func):
return lambda: f'<i>{func()}</i>'
@bold
@italic
def hello():
return 'Hello'
print(hello()) # <b><i>Hello</i></b>
总结
装饰器是Python中优雅而强大的特性,合理使用可以让你的代码更简洁、更可维护。