命名空间 | Python从入门到精通:高阶篇之十

命名空间概述

命名空间(namespace)就是变量存储的位置。每一个变量都需要存储到指定的命名空间当中。

每一个作用域都会有一个它对应的命名空间:全局命名空间,用来保存全局变量。函数命名空间用来保存函数中的变量。

命名空间实际上就是一个字典,是一个专门用来存储变量的字典。

命名空间举例

locals()

用来获取当前作用域的命名空间。如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间,返回的是一个字典。

scope = locals() # 当前命名空间
print(scope)

执行结果为:
命名空间 | Python从入门到精通:高阶篇之十

scope = locals() # 当前命名空间
print(type(scope))
print(a)
print(scope['a'])

命名空间 | Python从入门到精通:高阶篇之十
显示的形式就是一个字典,所有的变量都保存在该字典里。而且直接打印的a和scope里面的a是一样的。

我们可以通过操作这个字典来操作变量,比如:向scope中添加一个key-value

scope['c'] = 1000 
print(c)

执行结果为:
命名空间 | Python从入门到精通:高阶篇之十

向字典中添加key-value就相当于在全局中创建了一个变量(一般不建议这么做)。

还有一种做法:在函数内部调用locals()会获取到函数的命名空间。

def fn4():
    a = 10
    scope = locals() 
    scope['b'] = 20 

执行结果为:
命名空间 | Python从入门到精通:高阶篇之十
这里的locals是函数内的作用域。在命名空间里面添加了一个b,可以通过scope来操作函数的命名空间,但是也不建议这么做。

只需要知道变量是存储在这里就可以了,不需要去改变。

globals()

接下来介绍一个新函数globals,它是一个全局命名空间。 globals() 函数可以用来在任意位置获取全局命名空间。

def fn4():
    a = 10
    global_scope = globals()
    global_scope['a'] = 30
fn4()    

执行结果为:
命名空间 | Python从入门到精通:高阶篇之十
此时就可以在函数内部来改变全局变量了。

点击查看配套视频教程

获取更多内容请订阅Python学习站官方技术圈!

上一篇:高阶函数 | Python从入门到精通:高阶篇之十三


下一篇:闭包 | Python从入门到精通:高阶篇之十六