闭包和类的共同点:为什么它们都能“携带状态”
副标题 / 摘要 闭包和类都能“携带状态”,只是表达方式不同。本文用简单示例对比二者的共性与差异。 目标读者 学习函数式与面向对象的开发者 想理解“状态封装”概念的人 需要在不同范式间切换的工程师 背景 / 动机 闭包常被认为是函数式特性,类是面向对象特性。 实际上它们都解决“状态 + 行为绑定”的问题。 核心概念 闭包:函数捕获外部变量形成状态 类/对象:属性 + 方法封装状态 封装:隐藏内部状态细节 实践指南 / 步骤 用闭包实现一个计数器 用类实现同样功能 对比可读性与扩展性 选择更适合的表达方式 可运行示例 # 闭包实现 def make_counter(): x = 0 def inc(): nonlocal x x += 1 return x return inc # 类实现 class Counter: def __init__(self): self.x = 0 def inc(self): self.x += 1 return self.x if __name__ == "__main__": c1 = make_counter() print(c1()) c2 = Counter() print(c2.inc()) 解释与原理 闭包通过捕获变量保存状态,类通过属性保存状态。 二者都把“状态 + 行为”绑定在一起。 ...