当前位置: 首页 > 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.cnnetsun.cn/news/404284.html

相关文章:

  • 垂直文本识别表现:测试中文竖排文字的准确率
  • 边缘计算场景适用性:HunyuanOCR在IoT设备上的运行潜力
  • 为什么说HunyuanOCR是中小企业的OCR最佳选择?
  • 国产操作系统支持情况:统信UOS安装HunyuanOCR可行性验证
  • 解决多语种混合识别难题:HunyuanOCR的强大能力展示
  • 如何用腾讯混元OCR实现高效网页端文字识别?
  • 微信小程序对接设想:通过云函数调用HunyuanOCR接口
  • leetcode 961
  • 露天游泳池漆的优选之道:池面装饰层兼顾耐水与耐候
  • 教育场景适用性测试:HunyuanOCR识别试卷内容准确率报告
  • 邮件自动化:利用DeepSeek生成高效话术的全面指南
  • windows开发环境
  • 轻量化OCR模型兴起:HunyuanOCR引领行业新趋势
  • 企业合同管理:HunyuanOCR识别签署日期与金额条款预警
  • 海外地产投资分析:HunyuanOCR读取当地房产广告关键参数
  • 美团骑手导航优化:HunyuanOCR识别小区内复杂楼栋编号
  • 国际海洋研究所:HunyuanOCR提取航海日志中的观测记录
  • 边缘智能觉醒:2026年,AI从云端走入你的掌心
  • 鸿蒙智行2025年全年累计交付58.91万台 同比增长32%
  • MyBatisPlus与AI结合想象:数据库内容+OCR识别双驱动架构
  • 全球电商平台:HunyuanOCR统一处理各国商家上传资质证明
  • 跨境电商支付结算:HunyuanOCR识别银行水单完成对账
  • 指针编程不再难,C#不安全代码应用全解析
  • 快递柜取件提醒优化:HunyuanOCR识别包裹单号推送短信
  • 跨国公司管理:各国子公司报告OCR识别汇总全球经营状况
  • 公安刑侦应用:现场遗留纸条OCR识别追踪嫌疑人线索
  • 银行反洗钱系统:可疑交易凭证OCR识别标记高风险账户
  • 世界卫生组织合作:疫情通报文件OCR识别加速全球响应
  • vue+uniapp+springboot小程序基于手机端的陕西地区特色农产品团购平台设计与实现-
  • 轻量化OCR新选择:腾讯HunyuanOCR模型深度解析与应用指南