Python 装饰器是一种非常强大的功能,它可以让我们在不修改原函数的情况下,增加额外的功能。装饰器经常用于日志记录、认证、授权、缓存、事务处理等场景。

基本概念

装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。这个新的函数可以添加一些额外的功能,然后再返回。

def decorator(func):
    def wrapper(*args, **kwargs):
        # 在这里可以添加额外的功能
        print("装饰器开始执行")
        result = func(*args, **kwargs)
        print("装饰器结束执行")
        return result
    return wrapper

@decorator
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Alice")

在上面的例子中,decorator 函数是一个装饰器,它接收 say_hello 函数作为参数,并返回一个新的 wrapper 函数。wrapper 函数在执行 say_hello 函数之前和之后添加了打印语句。

常用装饰器

Python 中有很多常用的装饰器,以下是一些例子:

  • @staticmethod@classmethod:用于将函数转换为静态方法和类方法。
  • @property:用于将函数转换为属性访问器。
  • @functools.wraps:用于保留原函数的名称和文档字符串。

高阶装饰器

高阶装饰器是接收装饰器作为参数的装饰器。它可以让我们对装饰器进行封装,从而实现更灵活的装饰器功能。

def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Bob")

在上面的例子中,repeat 函数是一个高阶装饰器,它接收一个装饰器 decorator 作为参数,并返回一个新的装饰器 wrapperwrapper 函数会在执行原函数之前重复执行三次。

总结

Python 装饰器是一个非常强大的功能,它可以让我们在不修改原函数的情况下,增加额外的功能。通过理解装饰器的基本概念、常用装饰器和高阶装饰器,我们可以更好地利用这个功能来提高代码的灵活性和可维护性。

更多关于 Python 装饰器的信息

Python Decorator