news 2026/2/23 20:31:11

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/2/22 22:54:36

2026年8款降AI率工具实测,毕业党闭眼入这款

2026年8款降AI率工具实测,毕业党闭眼入这款 试了8款降AI工具,踩坑无数,最后锁定2个:嘎嘎降AI和比话降AI。 先说结论:日常用嘎嘎降AI(www.aigcleaner.com),4.8元/千字,达…

作者头像 李华
网站建设 2026/2/22 2:31:41

RAG不是魔法,是工程:从知识库到企业部署的硬核实践

前言 大模型热潮席卷技术圈,但真正将其用于企业生产环境的人很快会发现:开箱即用的聊天机器人远不能满足业务需求。模型会胡说八道,回答不了昨天刚发布的新政策,更不敢把客户合同上传到公有云API。这时候,RAG&#xf…

作者头像 李华
网站建设 2026/2/10 17:18:15

为什么几乎所有大厂,都在选 Go ?

沉默是金,总会发光大家好,我是沉默这几年,你会发现一个非常明显的趋势:腾讯、美团、滴滴、百度字节跳动(早期 Python,如今全面 Go 化)Google、bilibili……国内外头部互联网公司,几乎…

作者头像 李华
网站建设 2026/2/22 9:40:02

10.BTC-分叉-北大肖臻老师客堂笔记

北京大学肖臻老师《区块链技术与应用》公开课第 10 讲的主题是**“比特币的分叉:硬分叉与软分叉”**。这节课非常重要,因为它解释了在去中心化系统中,当协议(规则)发生升级时,网络是如何达成共识&#xff0…

作者头像 李华
网站建设 2026/2/22 8:56:49

智能包装行业发展趋势下,如何提高竞争力?

在当前快速发展的智能包装行业中,中科天工包装技术正在利用其技术优势积极布局市场。通过研发更高效的智能包装设备,中科天工致力于满足不断变化的市场需求。公司在技术创新上持续投入,推出具备自动化和智能管理功能的设备。这些设备不仅提升…

作者头像 李华