核心内容摘要
告别PPT付费阴影!一站式成品免费PPT网站入口,让你轻松成为设计达人!
本文主要讲解 Python 的命名空间、作用域和类型注解。
参考链接命令空间和作用域参考文档https://www.runoob.com/python3/python3-namespace-scope.html类型注解参考文档https://www.runoob.com/python3/python-type-hints.html1 Python 的命名空间和作用域本节主要讲解 Python 的命名空间和作用域。
命名空间命名空间时名称到对象的映射大部分命名空间是通过 Python 字典实现的。
命名空间提供了在项目中避免名字冲突的方法各个命名空间相互独立互不干扰即同一个命名空间不能有同名不同命名空间可以有同名。
类比同目录文件和不同目录文件。
Python 命名空间一般有三种命名方式分别是内置名称Built-in names、全局名称global names和局部名称local namesPython 中命名空间的查找顺序为局部命名空间-全局命名空间-内置命名空间若查找不到名称则放弃查找并引发一个 NameError 异常。
下面将详细介绍以命名空间的含义具体内容如下所示。
内置名称Python 中内置的名称如函数 abs 和 异常名称 BaseException 等。
全局名称Python 模块中定义的名称包括变量、函数、类、导入的模块、模块级的变量和常量。
局部名称函数中定义的名称记录了函数的变量包括函数参数和局部定义的变量。
作用域作用域是 Python 程序可以直接访问命名空间的正文区域Python 程序访问作用域的顺序是从内至外依次访问查找若未查找到则报未定义的错误。
Python 中的作用域分为 4 种分别是 Local、Enclosing、Global 和 Built-inPython 查找变量遵守 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
6 以上版本可以直接使用类型注解。
简单类型注解类型注解语法格式# 变量类型注解变量名:数据类型值# 函数类型注解def函数名(参数名:数据类型...)-返回值数据类型:# 函数体注意类型注解可以和参数默认值同时使用如函数参数。
复杂类型注解基本的 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,
变量名: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本节讲解了类型注解本文给大家介绍一种静态类型检查器 mypymypy 是 Python 类型检查中最流行的第三方库。
若你要使用它可以使用语句pip install mypy -i https://pypi.tuna.tsinghua.edu.cn/simple安装第三方库。
假设你用类型检查写了一个 type_mypy.py Python 文件然后你可以使用命令mypy type_mypy.py进行静态类型检查。