news 2026/7/28 14:43:30

8.10 命名空间 作用域

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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规则:从里到外找变量

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/25 10:21:44

飞书机器人插件开发:让HunyuanOCR自动识别群聊图片

飞书机器人插件开发:让HunyuanOCR自动识别群聊图片 在企业协作越来越依赖即时通讯工具的今天,飞书早已不仅是聊天软件,而是组织内部信息流转、任务协同和知识沉淀的核心枢纽。然而一个长期被忽视的问题是:每天成千上万张在群聊中流…

作者头像 李华
网站建设 2026/7/25 12:33:11

Nginx反向代理配置:安全暴露HunyuanOCR 8000端口API

Nginx反向代理配置:安全暴露HunyuanOCR 8000端口API 在AI模型日益成为企业核心能力的今天,如何将训练好的OCR系统稳定、安全地部署到生产环境,是每个技术团队必须面对的问题。尤其像腾讯混元OCR(HunyuanOCR)这类高性能…

作者头像 李华
网站建设 2026/7/16 10:24:32

亲测好用10个AI论文网站,研究生高效写作必备!

亲测好用10个AI论文网站,研究生高效写作必备! AI 工具如何助力论文写作? 在研究生阶段,论文写作是一项既重要又繁重的任务。无论是开题报告、文献综述还是最终的毕业论文,都需要大量的时间和精力。而随着 AI 技术的发…

作者头像 李华
网站建设 2026/7/24 5:04:40

语言模型融合策略:HunyuanOCR内部是否集成BERT-like模块?

HunyuanOCR是否内置语言理解模块?从架构设计看多模态OCR的演进 在智能文档处理需求激增的今天,传统OCR正面临一场深刻的范式变革。过去那种“先检测、再识别、最后靠规则清洗”的流水线模式,已经难以满足金融单据自动录入、跨国企业合同解析、…

作者头像 李华
网站建设 2026/7/27 14:47:06

Jupyter Notebook中启动腾讯混元OCR的两种方式对比

Jupyter Notebook中启动腾讯混元OCR的两种方式对比 在当今AI驱动的文档智能时代,如何快速、高效地将先进的OCR能力集成到实际项目中,已成为开发者面临的核心课题。尤其是在企业级场景下,从一张发票的文字提取,到跨国业务中的多语言…

作者头像 李华
网站建设 2026/7/28 12:40:59

学术研究好帮手:HunyuanOCR辅助论文文献信息提取

学术研究好帮手:HunyuanOCR辅助论文文献信息提取 在科研人员的日常工作中,面对堆积如山的扫描版论文、老期刊和外文资料时,最令人头疼的问题之一就是——这些文档明明是“文字”,却无法复制、难以检索,更别提批量分析了…

作者头像 李华