装饰器是 Python 中一种特殊的语法结构,可以在不改变原函数代码的情况下,在函数运行前后添加额外的操作。

一个简单的例子是,你有一个函数 original_func(),你想在它运行前打印一条信息,在运行后打印另一条信息,你可以这样做:

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print("Start running function:", func.__name__)
        result = func(*args, **kwargs)
        print("Finish running function:", func.__name__)
        return result
    return wrapper

@log_decorator
def original_func():
    print("Running the original function.")

original_func()
这样调用 original_func() 后会输出

Start running function: original_func Running the original function. Finish running function: original_func 这里 log_decorator 是一个装饰器,它接受一个函数作为参数,返回一个新函数。 在这个例子里,@log_decorator 将 original_func 函数传递给 log_decorator, log_decorator 返回 wrapper 函数,并将 wrapper 函数的名字替换为 original_func。

装饰器可以用来做很多事情,例如:

记录函数运行时间 检查用户权限 缓存函数结果 同步访问

装饰器还有很多其他用法,下面是一些常见的例子:

函数重载:使用装饰器实现函数重载。 类方法和静态方法:使用装饰器实现类方法和静态方法。 属性描述符:使用装饰器实现属性描述符,例如@property。 装饰器组合:使用多个装饰器组合实现复杂功能。 元编程:使用装饰器实现元编程。