国际访客建议访问 Primers 编程伙伴 国际版站点 > Python 教程 > 装饰器 以获得更好的体验。

# Python 的装饰器 Decorator

装饰器(Decorator) 是一种特殊的函数,用于在不修改原代码的情况下,动态修改其功能。

装饰器的创建方式和普通函数一样,使用方法如下:

@装饰器
被装饰的对象

它将 被装饰的对象 作为实际参数传递给 装饰器 ,然后将 装饰器 的返回值重新赋给 被装饰的对象。相当于:

被装饰的对象 = 装饰器(被装饰的对象)

例如,在复杂的项目中,为了方便调试,我们希望在每一个函数调用时都打印一段日志,通过装饰器就可以方便地实现此功能:

运行示例

# 创建装饰器
def log(fn):
    """
    装饰器,给函数添加日志记录功能。

    参数:
        fn(any): 要装饰的函数。

    返回值:
        any: 被装饰后的函数
    """

    # 创建一个新的函数,记录日志并调用原函数
    def wrapper(*args, **kwargs):
        # 打印日志,记录被调用的函数名即参数
        print(f"Calling {fn.__name__} with args={args}, kwargs={kwargs}")
        # 调用原函数
        fn(*args, **kwargs)

    # 返回该函数
    return wrapper

# 创建函数时使用装饰器
@log
def add(x:int, y:int):
    return x + y

@log
def sub(x:int, y:int):
    return x - y

# 调用函数
add(1, 1)
add(1, 2)
sub(3, 4)

# 闭包

上面的装饰器示例中,创建了一个名为 warpper 的函数,该函数中捕获了外层作用域的局部变量 fn

即使离开了外层作用域,调用 warpper 时,fn 仍然有效。

这种将 函数与其相关的引用环境组合而成的实体 称为 闭包(Closure),被捕获的值称为闭包的 上值(Up Value)

本文 更新于: 2025-06-19 01:15:29 创建于: 2025-06-19 01:15:29