如同一个dict,key 是变量名字,value 是变量的值。
每个函数function 有自己的命名空间,称local namespace,记录函数的变量。
每个模块module 有自己的命名空间,称global namespace,记录模块的变量,包括functions、classes、导入的modules、module级别的变量和常量。
build-in命名空间,它包含build-in function和exceptions,可被任意模块访问。
某段Python代码访问 变量x 时,Python会所有的命名空间中查找该变量,顺序是:
local namespace 即当前函数或类方法。若找到,则停止搜索;
global namespace 即当前模块。若找到,则停止搜索;
build-in namespace Python会假设变量x是build-in的函数函数或变量。若变量x不是build-in的内置函数或变量,Python将报错NameError。
对于闭包,若在local namespace找不到该变量,则下一个查找目标是父函数的local namespace。
例:namespace_test.py代码
def func(a=1):
b = 2
print(locals())#打印当前函数(方法)的局部命名空间
'''
locs = locals()#只读,不可写。将报错!
locs['c'] = 3
print(c)
'''
return a+b
func()
glos = globals()
glos['d'] = 4
print(d)
print(globals())#打印当前模块namespace_test.py的全局命名空间
内置函数locals()、globals()返回一个字典。区别:前者只读、后者可写。
命名空间 在from module_name import 、import module_name中的体现:from关键词是导入模块或包中的某个部分。
from module_A import X:会将该模块的函数/变量导入到当前模块的命名空间中,无须用module_A.X访问了。
import module_A:modules_A本身被导入,但保存它原有的命名空间,故得用module_A.X方式访问其函数或变量。








暂无数据