news 2026/6/15 19:11:54

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/6/15 12:14:38

2026年5款降AI工具实测推荐,知网AIGC检测轻松过关

2026年5款降AI工具实测推荐,知网AIGC检测轻松过关 72%,这是知网给我毕业论文的AI率。问题是,这篇论文我写了两周,连参考文献都是自己一条条查的。 先说结论:实测了十几款工具后,比话降AI(www.…

作者头像 李华
网站建设 2026/6/15 12:14:43

论文AI率从90%降到10%以下,这几款工具亲测靠谱

论文AI率从90%降到10%以下,这几款工具亲测靠谱 92%,这是我毕业论文初稿的AI率。看到这个数字的时候,离答辩只剩两周。 当时我已经绝望了,觉得肯定要延期。后来在学长推荐下试了几款降AI工具,最后用比话降AI&#xff…

作者头像 李华
网站建设 2026/6/15 13:13:54

MathCAD多用户管理策略

在科研、教育和工程领域,MathCAD作为一款强大的数学计算和工程设计软件,广泛应用于多个用户之间的协作。为了满足多用户环境下的许可证管理需求,MathCAD提供了灵活的多用户管理策略。本文将为您详细介绍MathCAD的多用户管理策略,帮…

作者头像 李华
网站建设 2026/6/15 12:27:24

树拍易购崩盘:“创新”商业模式下,这些“怪味儿”藏着致命陷阱

大家好,我是一家软件开发公司的负责人。山东那个“树拍易购”崩盘的事,相信大家都听说了——好家伙,几千人都跑去围堵讨说法,几十万人的钱就这么没了,全打了水漂。新闻里大家那叫一个愤怒又同情啊。不过我跟你们说&…

作者头像 李华
网站建设 2026/6/14 18:42:27

Java计算机毕设之基于springboot-vue城市宠物医院管理系统springboot的宠物医院管理系统(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/6/15 13:10:15

知识图谱在装备领域应用场景

装备全生命周期管理 智能保障与维修(MRO) 装备体系分析与作战推演 技术状态管理与变更追溯 情报融合与威胁分析(军事装备) 关键技术支撑 典型案例 挑战与趋势#知识图谱#装备领域#全生命周期管理#

作者头像 李华