• 预备
  • 基础语法
  • 容器类型
  • 函数
  • 面向对象
  • 输入输出
  • 进程控制
  • 线程控制
  • 正则表达式
  • 网络编程
  • 图形界面
  • 常见问题
  • API 帮助手册

  • 设置

1048

5 分钟

#装饰器 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)
Loading...

#闭包

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

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

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

创建于 2025/5/7 19:59:11

更新于 2025/5/8 15:15:30