news 2026/5/9 2:55:44

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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进行静态类型检查。

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

【2026最新】网络安全从入门到精通(超详细)学习路线!

首先看一下学网络安全有什么好处: 1、可以学习计算机方面的知识 在正式学习网络安全之前是一定要学习计算机基础知识的。只要把网络安全认真的学透了,那么计算机基础知识是没有任何问题的,操作系统、网络架构、网站容器、数据库、前端后端等…

作者头像 李华
网站建设 2026/5/5 20:19:43

软著代办公司vs AI工具,2026年哪种方式更省钱

800块,这是我上个月找代理公司办一个软著的报价。后来我用AI工具自己弄,39块钱搞定,材料质量还更好。 先说结论:2026年申请软著,AI工具比代办公司省钱太多了。语流软著宝(www.llmove.com)39元/…

作者头像 李华
网站建设 2026/5/3 3:50:45

2026毕业季降AI全攻略:从检测到通过只需3步

先说结论:3步搞定,花费不超过50块 毕业季到了,群里每天都有人问降AI的事。 作为上个月刚通过检测的过来人,我把2026毕业生降AI攻略整理出来:从检测到通过,其实只需要3步,整个流程1-2天搞定&am…

作者头像 李华
网站建设 2026/5/9 3:16:34

【课程设计/毕业设计】基于springboot的宠物医院管理系统 宠物商城购物系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/9 3:15:48

【QT】3.QWidget控件

目录 1. enabled:是否可用状态 2. geometry:位置与大小 3. windowFrame:窗口框架 4. windowTitle:窗口标题 5. windowIcon:窗口图标 6. qrc 资源文件机制 7. windowOpacity:窗口透明度 8. cursor&a…

作者头像 李华
网站建设 2026/5/9 3:16:22

CC攻击的核心本质

一、CC攻击的核心本质 CC攻击的本质是“利用应用层协议漏洞,以合法请求外衣实施的资源耗尽攻击”。其核心逻辑是:攻击者通过控制大量傀儡机(僵尸网络)或使用脚本工具,向目标服务器发送大量需要复杂计算或资源调用的请…

作者头像 李华