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

8.10 命名空间 作用域


文章目录

  • 前言
  • 一、命名空间
    • 1.1 什么是命名空间?
    • 1.2 命名空间的三种类型
    • 1.3 命名空间的生命周期
  • 二、作用域
    • 2.1 作用域与命名空间的关系
    • 2.2 作用域的四种类型(LEGB规则)
    • 2.3 访问不同作用域的变量
    • 2.4 总结对比

前言

本文主要介绍命名空间与作用域的概念和关系等相关知识。


一、命名空间

1.1 什么是命名空间?

命名空间可以理解为变量名和其对应对象之间的映射关系。Python 使用字典来实现命名空间,确保不同上下文中的名称不会冲突。

  • 简单比喻:命名空间就像公司里的工牌系统
  • 不同部门可以有同名员工(不同命名空间可重名)
  • 同一部门不能有同名员工(同一命名空间不可重名)
python# 示例:不同命名空间中的同名变量不会冲突deffunc1():x=10# func1的局部命名空间print(f"func1中的x:{x}")deffunc2():x=20# func2的局部命名空间(与func1的x无关)print(f"func2中的x:{x}")global_x=30# 全局命名空间func1()# 输出: func1中的x: 10func2()# 输出: func2中的x: 20print(f"全局的x:{global_x}")# 输出: 全局的x: 30

1.2 命名空间的三种类型

类型内容示例
内置命名空间Python内置函数、异常print(), len(), ValueError
全局命名空间模块级别定义的名称模块变量、函数、类
局部命名空间函数内部定义的名称参数、局部变量
python# 内置命名空间:Python启动时自动创建print("内置函数示例:",abs(-5),len([1,2,3]))# 全局命名空间:模块级别定义GLOBAL_VAR="我是全局变量"defglobal_func():return"我是全局函数"# 局部命名空间:函数内部定义deflocal_example(param):local_var="局部变量"print(f"参数:{param}, 局部变量:{local_var}")

1.3 命名空间的生命周期

命名空间类型创建时间销毁时间
内置命名空间Python解释器启动时Python解释器退出时
全局命名空间模块被导入时Python解释器退出时
局部命名空间函数被调用时函数执行结束或异常退出
python# 演示局部命名空间的生命周期defcounter():"""每次调用都会创建新的局部命名空间"""count=0# 每次调用时重新创建count+=1returncountprint(counter())# 输出: 1print(counter())# 输出: 1(不是2,因为每次都是新命名空间)

二、作用域

2.1 作用域与命名空间的关系

作用域是代码中可以访问某个命名空间的区域,而命名空间是变量存储的容器。

  • 关键区别:
    作用域是静态的:由代码结构决定,在编写时就固定了
    命名空间是动态的:在程序运行时创建和销毁
python# 作用域的静态性示例defouter():x="outer"# outer函数的作用域definner():print(x)# 可以访问outer的x(作用域嵌套)returninner func=outer()func()# 输出: outer(即使outer已执行完,inner仍记得x)

2.2 作用域的四种类型(LEGB规则)

Python按照 LEGB规则 搜索变量:

python# L: Local 局部作用域(函数内部)# E: Enclosing 嵌套作用域(外层函数)# G: Global 全局作用域(模块级别)# B: Built-in 内置作用域# 内置作用域 (B)# print, len, abs 等内置函数# 全局作用域 (G)global_var="global"defouter():# 嵌套作用域 (E)enclosing_var="enclosing"definner():# 局部作用域 (L)local_var="local"# Python按 LEGB 顺序搜索变量:# 1. 先在 Local 作用域查找 local_var# 2. 再到 Enclosing 作用域查找 enclosing_var# 3. 再到 Global 作用域查找 global_var# 4. 最后到 Built-in 作用域查找内置名称print(local_var)# 找到print(enclosing_var)# 找到print(global_var)# 找到print(len([1,2,3]))# 使用内置函数inner()outer()

2.3 访问不同作用域的变量

python# 访问全局变量(需声明 global)count=0defincrement():globalcount# 声明使用全局变量count+=1returncountprint(increment())# 1print(increment())# 2# 访问嵌套作用域变量(需声明 nonlocal)defouter():counter=0definner():nonlocalcounter# 声明使用外层变量counter+=1returncounterreturninner closure=outer()print(closure())# 1print(closure())# 2

2.4 总结对比

特性命名空间作用域
本质名称到对象的映射可访问命名空间的代码区域
实现字典结构代码结构决定
特性动态创建/销毁静态确定
关系容器(存储变量)权限(访问变量)
  • 记忆口诀:
    命名空间:变量住在哪里
    作用域:你能访问哪些地方
    LEGB规则:从里到外找变量

http://www.jsqmd.com/news/188195/

相关文章:

  • 报错:OSError: [WinError 1455] 页面文件太小,无法完成操作
  • 华为云ModelArts适配可能性:公有云平台部署建议
  • 亲测好用10个AI论文网站,研究生高效写作必备!
  • CSS样式干扰识别吗?测试HunyuanOCR对网页截图的鲁棒性
  • 移动端适配问题:HunyuanOCR能否用于APP内集成?
  • Task02:数据库的基本使用(MongoDB)
  • 上下文纠错能力验证:HunyuanOCR是否具备语义校正功能
  • 2025年宁夏银川市有实力的岗亭源头厂家推荐排行榜,成品移动岗亭/值班岗亭/停车场岗亭/移动房屋,岗亭厂家推荐排行榜 - 品牌推荐师
  • 24 - 数据存储 - 向量数据库
  • Nginx反向代理配置:安全暴露HunyuanOCR 8000端口API
  • 边缘计算场景适用性:HunyuanOCR在IoT设备上的运行潜力
  • 2025知码狐北京集训
  • 车辆管理系统毕业论文+PPT(附源代码+演示视频)
  • OCR accuracy benchmark测试:HunyuanOCR vs PaddleOCR
  • JavaSE——while循环
  • 这可能是你见过最省钱的电梯调试方案
  • Obsidian笔记自动化:图片转文字并插入Markdown文档
  • 【数字信号去噪】基于matlab灰雁算法优化变分模态分解GGO-VMD数字信号去噪(优化K值 alpha值 综合指标 适应度函数包络熵)【含Matlab源码 14812期】
  • 低分辨率图像识别:HunyuanOCR在模糊画面下的稳定性
  • 视频字幕识别新方案:基于腾讯混元OCR的技术路径探索
  • 银泰百货卡套装回收全流程解析,专业平台让闲置变现金 - 京顺回收
  • WPS Office插件开发方向:内置AI文字识别功能探讨
  • React/Vue项目中引入HunyuanOCR:前后端分离架构整合思路
  • IPCC报告编写辅助:HunyuanOCR提取全球科研机构纸质研究成果
  • 清华镜像站之外的选择:高效获取腾讯混元OCR模型文件
  • 京东无人机配送:HunyuanOCR识别农村地区手写收件信息
  • 国际反诈联盟:HunyuanOCR分析跨境诈骗团伙使用的伪造文件
  • 邮件自动化:利用DeepSeek生成高效话术的全面指南
  • Dify平台能否集成HunyuanOCR?低代码+OCR的可能路径
  • 批量文档处理自动化:DeepSeek + Python 实现多格式文件内容提取与汇总