3.3.3作用域分类、名称空间与LEGB规则
下面的描述中,我们可以不用理解还没有详细介绍的概念(比如,类、嵌套函数等),只需要明白文字描述的内容和代码中的注释即可。另外,下面提到定义的名称,实际继承的名称也可以,但由于我们还没介绍类中的继承性质,为简化描述,这里不提继承,只要我们明白就可以了。
(1)作用域分类及名称空间
从广义上讲,程序代码中某个缩进位置、标识符(名称)等直接归属于一个主体的范围里面,并受主体直接支配和控制(注意,不是代表这个主体),我们称这个主体为缩进位置或标识符(名称)等的归属主体。
前面我们已经提到,标识符(名称)归属于某个主体,这个主体从根本上决定了标识符(名称)的作用域,也即名称的归属主体从根本上决定了这个名称的作用域。根据名称的归属主体的辐射范围,python中的作用域可以划分为内置作用域(built in scope,内建作用域)、全局作用域(global scope)、附入作用域(enclosing scope,嵌套作用域)、本地作用域(local scope,局部作用域)。作用域(scope)的概念是针对程序代码中的标识符(名称)的,因而,这些作用域都对应有名称空间(命名空间,Namespace