热线电话:13121318867

登录
2019-04-01 阅读量: 687
解释命名空间

如同一个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方式访问其函数或变量。

0.0000
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子