在 Python 中,所有的名字都存在于一个空间中,它们在该空间中存在和被操作——这就是命名空 间。它就好像一个盒子,每一个变量名字都对应装着一个对象。当查询变量的时候,会从该盒子里面寻 找相应的对象。
python
使用命名空间记录变量。
python
中的命名空间就像是一个
dict
,
key
是变量的名字,
value
是变量的值。
在一个 Python 程序中的任何一个地方,都存在几个可用的命名空间。
1.python中,每个函数都有一个自己的命名空间,叫做
local namespace,它记录了函数的变量。
2.python中,每个
module有一个自己的命名空间,叫做
global namespace,它记录了
module的变量,包括
functions, classes 和其它
imported modules,还有
module级别的 变量和常量。
3.还有
build-in 命名空间,可以被任意模块访问,这个
build-in命名空间中包含了
build-in function 和
exceptions。
命名空间查找顺序:
当
python
中的某段代码要访问一个变量
x
时,
python
会在所有的命名空间中寻找这个变量,查找的顺序为:
1>local namespace - 指的是当前函数或者当前类方法。如果在当前函数中找到了变量,停止搜索.
2>global namespace - 指的是当前的模块。如果在当前模块中找到了变量,停止搜索
3>build-in namespace - 如果在之前两个
namespace中都找不到变量
x,
python会假设
x是
build-in的函数或者变量。如果
x不是内置函数或者变量,
python会报错
NameError。
嵌套函数的情况:
1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜索
2、然后是在父函数的命名空间中搜索
3、接着是模块命名空间中搜索
4、最后在内置命名空间中搜索
!!!不同命名空间中命名没有任何联系!!!