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

Python命名空间-作用域-类型注解

本文主要讲解 Python 的命名空间、作用域和类型注解。

参考链接:

  • 命令空间和作用域参考文档:https://www.runoob.com/python3/python3-namespace-scope.html
  • 类型注解参考文档:https://www.runoob.com/python3/python-type-hints.html

1 Python 的命名空间和作用域

本节主要讲解 Python 的命名空间和作用域。

  1. 命名空间

    命名空间时名称到对象的映射,大部分命名空间是通过 Python 字典实现的。命名空间提供了在项目中避免名字冲突的方法,各个命名空间相互独立,互不干扰,即同一个命名空间不能有同名,不同命名空间可以有同名。类比同目录文件和不同目录文件。

    Python 命名空间一般有三种命名方式,分别是内置名称(Built-in names)、全局名称(global names)和局部名称(local names),Python 中命名空间的查找顺序为局部命名空间->全局命名空间->内置命名空间,若查找不到名称,则放弃查找并引发一个 NameError 异常。下面将详细介绍以命名空间的含义,具体内容如下所示。

    内置名称,Python 中内置的名称,如函数 abs 和 异常名称 BaseException 等。

    全局名称,Python 模块中定义的名称,包括变量、函数、类、导入的模块、模块级的变量和常量。

    局部名称,函数中定义的名称,记录了函数的变量,包括函数参数和局部定义的变量。

  2. 作用域

    作用域是 Python 程序可以直接访问命名空间的正文区域,Python 程序访问作用域的顺序是从内至外依次访问查找,若未查找到,则报未定义的错误。Python 中的作用域分为 4 种,分别是 Local、Enclosing、Global 和 Built-in,Python 查找变量遵守 LEGB 规则,即查找顺序为L -> E -> G -> B。作用域具体内容如下所示。

    Local,最内层,入当前函数的局部变量。

    Enclosing,包含非局部和非全局的变量,如 2 层嵌套函数的外层函数的变量。

    Global,当前脚本的最外层,如当前模块的变量。

    Built-in,包含内置变量或关键字,内置作用域,最后检索。

    Notebook Tips

    • 内置作用域需要导入标准模块 builtins 来实现,由于该变量没有导入内置作用域,所以需要导入该文件来使用它。如使用一下代码来查看 Python 预定义了哪些变量。

      importbuiltinsdir(builtins)
    • Python 中只有模块、类和函数才会引入新的作用域,代码块不会引入新的作用域,如条件语句、循环语句和try-except等,所以代码块定义的变量,外部也可以使用。

    • 当内部作用域想要修改外部作用域时可以使用关键字 global 和 nonlocal。

      • 若内部作用域想要修改全局变量时可以使用关键字 global。
      • 若内部作用域想要修改嵌套作用域外层函数变量时可以使用变量 nonlocal。

2 Python 的类型注解

本节主要从简单类型注解和复杂类型注解两个方面介绍类型注解。

类型注解就是给代码添加“说明标签”的技术,说明变量、函数参数、返回值的数据类型。简言之,类型注解就是注明数据类型的语法,它能够提高代码的可读性,便于静态检查,通过工具发现潜在的类型错误,增强 IDE 支持,使代码编辑器能够提供更加精确的代码补全和提示。注意,Python 3.6 以上版本可以直接使用类型注解。

  1. 简单类型注解

    类型注解语法格式

    # 变量类型注解变量名:数据类型=# 函数类型注解def函数名(参数名:数据类型,...)->返回值数据类型:# 函数体

    注意,类型注解可以和参数默认值同时使用,如函数参数。

  2. 复杂类型注解

    基本的 str、list、int 等很好使用类型注解,若要使用复杂类型注解需要使用模块 typing 提供强大的工具,复杂类型注解的场景有列表、元组等容器类型、可选类型(Optional)、联合类型(Union)。下面将通过代码展示他们的使用方式。

    fromtypingimportList,Dict,Tuple,Set,Optional,Union# 容器类型 List,Dict,Tuple,Set变量名:容器[数据类型]=变量值 my_list:List[int]=[1,2,3]变量名:Dict[键的数据类型,值的数据类型]=变量值 my_dict:Dict[str,int]={"age":12,"grade":3}变量名:Tuple[数据类型,数据类型,...]=变量值 my_tuple:Tuple[int,str,int]=(i,"kangkang",12)变量名:Set[数据类型]=变量值 my_set:Set[str]={"Jane","kangkang"}# 可选类型 Optional,通常用于函数返回值,变量的数据类型为数据类型中的某一个或为 Nonedefmy_func(data:List[int]=[1,2,3])->Optional[str]:# 函数体# 联合类型 Union,数据类型为多种数据类型中的某一个defmy_func(input_info:Union[str,int,List[str]])->None:# 函数体

    Notebook Tips
    本节讲解了类型注解,本文给大家介绍一种静态类型检查器 mypy,mypy 是 Python 类型检查中最流行的第三方库。若你要使用它,可以使用语句pip install mypy -i https://pypi.tuna.tsinghua.edu.cn/simple安装第三方库。假设你用类型检查写了一个 type_mypy.py Python 文件,然后你可以使用命令mypy type_mypy.py进行静态类型检查。

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

相关文章:

  • Java全栈工程师的面试实战:从基础到微服务
  • 动能丨揭榜挂帅——共赢逻辑激活协同新动能
  • TCP并发实现
  • 24位AD测温模块1-100米自动补偿滤波稳采适配各类工控场景
  • 铂电阻温度模块的应用边界?多行业场景汇总告诉你
  • 如何选择靠谱的IT外包公司?这3个核心标准是关键
  • ArcGIS Python零基础脚本开发教程---Python入门
  • 一库统管全域数据:金仓 KingbaseES 多模融合架构与全栈替代实践
  • 树拍易购崩盘:“创新”商业模式下,这些“怪味儿”藏着致命陷阱
  • 初见Vibe Coding:前置准备,在Windows上安装WSL2和终端和npm
  • 大数据领域数据架构的性能监控与优化
  • MathCAD多用户管理策略
  • RAG落地不是拼乐高:三层架构才是知识库的真正骨架
  • RAG不是魔法,是工程:从知识库到企业部署的硬核实践
  • 网络安全年薪天花板92万!2025年缺口破百万,小白如何快速入门拿高薪?(珍藏版)
  • 【必收藏】30个网络安全黑话详解:从小白到专家的进阶指南
  • 亲测好用10个AI论文软件,本科生搞定毕业论文!
  • 让你的 AIPC “能听会说”:Fun-ASR-Nano × Fun-CosyVoice 3.0 全链路加速实战
  • C#+SQL:轻量级员工管理系统实战
  • 为什么几乎所有大厂,都在选 Go ?
  • Java计算机毕设之基于springboot-vue城市宠物医院管理系统springboot的宠物医院管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 关于视频剪辑工具的调查问卷
  • ‌视频转音频不求人,这几种方法零基础也能学会!
  • 【课程设计/毕业设计】基于springboot的宠物医院管理系统 宠物商城购物系统【附源码、数据库、万字文档】
  • [python3]:数理统计和机器学习的常用库
  • 深入解析:【后端】蓝绿发布全链路改造详解:从配置到生产环境的完整实践
  • 2026毕业季必备:6款降AI率工具红黑榜
  • 软著材料生成器哪家好?亲测5款后只推荐这一个
  • 论文AI率100%怎么办?这8款工具帮你降到10%以下
  • 免费降AI工具有用吗?实测5款告诉你哪个真能用