约 1048 字
约 5 分钟
装饰器(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)
Loading...
上面的装饰器示例中,创建了一个名为 warpper
的函数,该函数中捕获了外层作用域的局部变量 fn
。
即使离开了外层作用域,调用 warpper
时,fn
仍然有效。
这种将 函数与其相关的引用环境组合而成的实体 称为 闭包(Closure),被捕获的值称为闭包的 上值(Up Value)
创建于 2025/5/7 19:59:11
更新于 2025/5/8 15:15:30