命名空间是一种实现范围的方法。
在Java(或C)中,编译器通过静态范围分析确定变量在何处可见。
在C语言中,作用域可以是函数的主体,也可以是全局的,也可以是外部的。编译器会为您说明这一点,并根据作用域规则解析每个变量名。编译所有模块后,链接器将解析外部名称。
在Java中,作用域是方法函数或类的所有方法的主体。一些类名也具有模块级范围。同样,编译器会在编译时解决此问题,并根据范围规则解析每个名称。
在Python中,每个包,模块,类,函数和方法函数都拥有一个“名称空间”,在该名称空间中解析变量名。另外,如果名称不在本地名称空间中,则使用全局名称空间。
每个变量名都在本地名称空间(函数的主体,模块等)中检查,然后在全局名称空间中检查。
通常仅在本地名称空间中创建变量。该global
和nonlocal
语句可以比本地命名空间创建其他变量。
当评估函数,方法函数,模块或包(即开始执行)时,将创建一个名称空间。将其视为“评估环境”。当函数或方法函数等完成执行时,将删除名称空间。变量被删除。对象也可能被丢弃。