Python 装饰器从入门到进阶

什么是装饰器?

装饰器是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中优雅而强大的特性,合理使用可以让你的代码更简洁、更可维护。