当前位置: 首页 > news >正文

闭包与作用域的理解

在这里插入图片描述

1. 闭包(Closure)
  • 定义:闭包是一个函数与其“捕获”的外部变量(来自外层作用域的变量)的组合。即使外层函数已经执行完毕,内部函数仍能记住并访问这些变量。
  • 核心机制:当内层函数引用了外层函数的变量时,Python 会将这些变量绑定到闭包中,使其生命周期延长至闭包存在期间。

例子

def outer():
    x = 10  # 外层函数的变量
    def inner():
        print(x)  # 内层函数捕获了外层变量x
    return inner

closure = outer()  # outer()执行完毕,x本应被销毁
closure()  # 输出:10 → 但闭包仍然能访问x!
  • 关键点
    • 闭包的本质是 函数 + 环境变量 的捆绑。
    • 闭包中的变量是“记忆”的,而非实时查找的(注意循环陷阱,如延迟绑定问题)。

2. 作用域(Scope)

Python 使用 LEGB 规则 查找变量:

  • L(Local):当前函数内部。
  • E(Enclosing):外层嵌套函数(闭包的关键!)。
  • G(Global):模块全局作用域。
  • B(Built-in):内置函数(如 print, len)。

例子

x = "global"
def outer():
    x = "outer"
    def inner():
        x = "inner"
        print(x)       # 输出:inner (Local优先)
    inner()
    print(x)           # 输出:outer (Enclosing)
outer()
print(x)               # 输出:global (Global)
  • 闭包与作用域的联动
    当内层函数访问外层函数的变量时,Python 会将这些变量“冻结”到闭包中,即使外层函数已执行完毕,闭包仍能通过 Enclosing作用域 访问它们。

总结

  • 闭包:是函数式编程的核心概念,让函数能“记住”外部状态,是装饰器实现的基础。
  • 作用域:通过 LEGB 规则控制变量的可见性,闭包通过 Enclosing 作用域实现变量捕获。

相关文章:

  • Linux操作系统下离线安装nginx
  • 嵌入式学习第三十天--队列
  • 【区块链安全 | 第二十篇】类型之运算符
  • Docker 拉取镜像部分成功部分失败?
  • TDengine 核心概念与时序数据模型深度解析(二)
  • 从TRPO到GRPO
  • scikit-surprise 智能推荐模块使用说明
  • 简单视图函数
  • (BFS)题解:P9425 [蓝桥杯 2023 国 B] AB 路线
  • 智能打印预约系统:微信小程序+SSM框架实战项目
  • 机器学习的一百个概念(6)最小最大缩放
  • Codeforces Round #1014 (Div. 2)
  • 三路排序算法
  • 本科lw指导
  • 鸿蒙NEXT开发Base64工具类(ArkTs)
  • 消息队列--RocketMQ
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例13,TableView16_13 键盘辅助拖拽示例
  • 【算法】快速幂
  • 6内存泄露问题的讨论
  • MySQL其他客户端程序
  • 淘宝有做钓鱼网站的吗/百度官网地址
  • 网站建设 自助建站/如何做网站推广及优化
  • 获得网站后台地址/网站网络营销
  • 彻底关闭qq顶部小程序入口/seo手机排名软件
  • 免备案自助建站网站/优化网站平台
  • 济南做网站费用/黄山seo公司