目录
什么是命名空间
一个命名空间是一个容器,容器内的元素是能映射到对象的名称
命名空间是一个 字典(dictionary)
多个命名空间相互独立,允许不同命名空间有相同的名称
命名空间的分类
1.每个函数都有着自已的命名空间,叫做局部命名空间,它记录了函数的变量,包括函数的参数和局部定义的变量
2.每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
3.还有就是内置命名空间,任何模块均可访问它,它存放着内置的函数和异常
命名空间查找顺序
1.首先查找【局部命名空间】:特指当前函数或类的方法
2.再查找【全局命名空间】:特指当前的模块
3.最后查找【内置命名空间】:对每个模块都是全局的
4.如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,如,NameError: name 'aa' is not defined
嵌套函数中命名空间查找顺序
1.先在当前 (嵌套的或 lambda) 函数的命名空间中搜索
2.然后是在父函数的命名空间中搜索
3.接着是模块命名空间中搜索
4.最后在内置命名空间中搜索
命名空间的访问方式
本地符号表存储所有本地范围的相关信息,通过locals()
方法来访问,locals() 函数会以字典类型返回当前位置的全部局部变量
全局符号表存储程序全局范围的所有信息,使用globals()
方法来访问,globals()函数返回全局 (模块级别)命名空间