命名空间和作用域

Posted wdmx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了命名空间和作用域相关的知识,希望对你有一定的参考价值。

Namespace and Scope(命名空间和作用域)
namespace
Namespace(只)是 从名字到对象的一个映射(a mapping from name to objects) 。大部分namespace都是按Python中的字典来实现的。有一些常见的namespace:built-in中的集合( abs() 函数等)、一个模块中的全局变量等。

从某种意义上来说,一个对象(object)的所有属性(attribute)也构成了一个namespace。在程序执行期间,可能(其实是肯定)会有多个名空间同时存在。不同namespace的创建/销毁时间也不同。

此外,两个不同namespace中的两个相同名字的变量之间没有任何联系。

scope
有了namespace基础之后,让我们再来看看scope。Scope是Python程序的一块文本区域(textual region)。

在该文本区域中,对namespace是可以直接访问,而不需要通过属性来访问。

Scope是定义程序该如何搜索确切地“名字-对象”的名空间的层级关系。
(The “scope” in Python defines the “hirerchy level” in which we search namespaces for
certain “name-to-object” mappings.)

Tip

直接访问:对一个变量名的引用会在所有namespace中查找该变量,而不是通过属性访问。

属性访问:所有名字后加 . 的都认为是属性访问。

如 module_name.func_name ,需要指定 func_name 的名空间,属于属性访问。
而 abs(-1) , abs 属于直接访问。

两者之间有什么联系呢?
Important

在Python中,scope是由namespace按特定的层级结构组合起来的。

scope一定是namespace,但namespace不一定是scope.








以上是关于命名空间和作用域的主要内容,如果未能解决你的问题,请参考以下文章

函数_命名空间和作用域

Python命名空间和作用域

函数(命名空间和作用域)

python进阶之命名空间与作用域

Python3 命名空间和作用域

Python_命名空间和作用域_25