命名空间概述
命名空间(namespace)就是变量存储的位置。每一个变量都需要存储到指定的命名空间当中。
每一个作用域都会有一个它对应的命名空间:全局命名空间,用来保存全局变量。函数命名空间用来保存函数中的变量。
命名空间实际上就是一个字典,是一个专门用来存储变量的字典。
命名空间举例
locals()
用来获取当前作用域的命名空间。如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间,返回的是一个字典。
scope = locals() # 当前命名空间
print(scope)
执行结果为:
scope = locals() # 当前命名空间
print(type(scope))
print(a)
print(scope['a'])
显示的形式就是一个字典,所有的变量都保存在该字典里。而且直接打印的a和scope里面的a是一样的。
我们可以通过操作这个字典来操作变量,比如:向scope中添加一个key-value
scope['c'] = 1000
print(c)
执行结果为:
向字典中添加key-value就相当于在全局中创建了一个变量(一般不建议这么做)。
还有一种做法:在函数内部调用locals()会获取到函数的命名空间。
def fn4():
a = 10
scope = locals()
scope['b'] = 20
执行结果为:
这里的locals是函数内的作用域。在命名空间里面添加了一个b,可以通过scope来操作函数的命名空间,但是也不建议这么做。
只需要知道变量是存储在这里就可以了,不需要去改变。
globals()
接下来介绍一个新函数globals,它是一个全局命名空间。 globals() 函数可以用来在任意位置获取全局命名空间。
def fn4():
a = 10
global_scope = globals()
global_scope['a'] = 30
fn4()
执行结果为:
此时就可以在函数内部来改变全局变量了。
点击查看配套视频教程
获取更多内容请订阅Python学习站官方技术圈!