python命名空间与作用域的关系

命名空间在python中无处不在,简直屌到爆炸:

全局,内建,如果有函数执行则有局部命名空间,  对象命名空间(包含了class类对象,实例对象,模块对象...),都有命名空间.

命名空间就是变量到对象的映射集合.通过 .__dict__ 内置属性可以看到命名空间内的键值对

 例如:

def test():
    pass
test.a = 1  #a变量(属性) 放入到函数对象的命名空间内

class SomeClass(object):
    pass
s = SomeClass()
s.a = 123   #a变量被放入s实例的命名空间内 


作用域与命名空间的关系:

作用域查找及限制了是否可以访问到这些命名空间内的属性(变量).

简单来说,作用域是一个查找命名空间以及命名空间内属性的过程;

比如当在函数内调用print 时, 作用域找属性的过程:局部命名空间->函数命名空间->全局命名空间->builtins模块的命名空间.

如果全找不到则NameError 

你可能感兴趣的:(py)