命名空间(namespace
)
先了解第一个概念:命名空间。
命名空间是从命名到对象的映射。当前 pytyon 的命名空间是靠字典来实现的,但是对我们来说我们并需要关注这个,而且以后也有可能会更改。
命名空间的一些例子:
内置的命名集(
the set of built-in names
)。这命名集(命名空间)包含了像abs()
这样的内置函数和内置的异常名等。在一个模块中的全局命名集。
函数内的局部命名空间。
从某种意义上来说,一个对象的属性集也是一个命名空间。
对命名空间来说,需要要知道最重要的一点是:在不同的命名空间的中的命名绝对没有任何的关系!
不同的命名空间具有不同的生命周期。
包含内置命名的命名空间在 python 一启动就被创建了,而且在 python 程序结束之前永远不会被删除。
一个模块的全局命名空间是在这个模块被读入到内存的时候被创建。正常情况下全局命名空间也是在 python 结束之后才会被删除。
局部命名空间是在函数被调用的时候被创建。当函数结束或者抛了异常这个函数又没处理的时候,局部命名空间会被销毁。(用忘记这个局部命名空间可能更恰当)
当然,函数递归调用时,每调用一次都会创建一个新的局部命名空间。