Python中的装饰器

在Python的世界里,装饰器是一种高级语法糖,它能够让我们的代码更加简洁、模块化。装饰器本质上是一个函数,它接受一个函数作为参数并返回一个新的函数。这个特性使得装饰器非常适合用于在不修改原函数的情况下,增加一些额外的功能,比如日志记录、性能测试等。

首先,让我们从一个简单的例子开始。假设我们有一个打印问候语的函数:

def greeting(name):
    return f"Hello, {name}!"

现在,我们想要在每次调用这个函数时都记录一条日志。传统的方法是直接在函数内部添加日志代码,但这会破坏函数的纯净性,引入了与主要功能无关的代码。使用装饰器,我们可以保持原函数不变,同时增加日志功能:

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Log: Calling function {func.__name__}")
        return func(*args, **kwargs)
    return loader

@log_decorator
def greeting(name):
    return f"Hello, {name}!"

在这个例子中,log_decorator就是一个装饰器。它接收一个函数作为参数(在这里是greeting函数),然后定义了一个内部的wrapper函数。wrapper函数在调用原始函数前后执行一些额外的操作(这里是打印日志),最后返回原始函数的结果。

装饰器的魔力在于@log_decorator这一行,这是一个语法糖,等同于下面的代码:

greeting = log_decorator(greeting)

这行代码将greeting函数作为参数传递给log_decorator,然后将返回的新函数赋值回greeting。当我们之后调用greeting("World")时,实际上是在调用wrapper函数,从而实现了在不修改原函数的情况下增加新功能的目的。

除了日志记录,装饰器还可以用于很多场景,例如:权限验证、数据校验、缓存结果等。装饰器的使用让这些横切关注点得到了集中管理,大大提升了代码的可维护性和可读性。

posted @ 2025-11-06 09:05  kiyte  阅读(2)  评论(0)    收藏  举报