命名空间
先看看官方文档的一段话:
命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。
A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries。
命名空间提供了在项目中避免名字冲突的1种方法。各个命名空间是独立的,没有任何关系的,所以1个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。
我们举1个计算机系统中的例子,1个文件夹(目录)中能包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件能重名。
一般有3种命名空间:
1:内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。
2:全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
3:局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)
命名空间查找顺序:
假设我们要使用变量 runoob,则 Python 的查找顺序为:局部的命名空间 -> 全局命名空间 -> 内置命名空间。
如果找不到变量 runoob,它将放弃查找并引发1个 NameError 异常:
NameError: