命名空间(namespace),指的是变量存储的位置,每一个变量都需要存储到指定的命名空间当中
每一个作用域都会有一个它对应的命名空间
全局命名空间,用来保存全局变量。函数命名空间用来保存函数中的变量。
命名空间实际上就是一个字典,是一个专门用来存储变量的字典。
locals( ) 用来获取当前作用域的命名空间
- 如果在全局作用域中调用 locals( ) ,则获取全局命名空间;
- 如果在函数作用域中调用 locals( ) ,则获取函数命名空间;
返回的是一个字典。
2.在全局作用域调用 locals() 会获取到全局命名空间:print(locals())
# 可以通过locals()[key]来查找想要的数据
def fn(a:int,b:bool,c:str='hello') -> str:
'''
这里是文档字符串部分:
author:paul
date:2022-05-06
函数的作用:
函数的参数:
'''
return 10
a = 20
b = 1111
print(locals())
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_impornal.SourceFile0>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': '/Users/pamo02.py', '__cached__': None, 'fn': , 'a': 20, 'b': 1111}
print(locals()['a'])
print(a)
# 20
# 20
在 locals( ) 字典中添加键值对就相当于在全局作用域中创建了一个变量(了解即可)。
a = 20 b = 1111 locals()['d'] = 'abc' print(d) # abc3.在函数内部调用 locals() 会获取到函数的命名空间:
a = 100
b = 'ace'
def fn():
# 在函数内部调用 locals() 会获取到函数的命名空间
scope = locals()
print(scope)
def fn1():
c = 77
d = 23
print(c + d)
scope = locals()
print(scope)
fn()
# {}
# 这里输出为空
# 因为在该函数内部没有变量
fn1()
# 100
# {'c': 77, 'd': 23}
# 其中 100 是函数自身打印的结果
# {'c': 77, 'd': 23} 就是在该函数fn1里面存在的变量
在 locals( ) 字典中添加键值对就相当于在函数作用域中创建了一个变量(了解即可)。
相较于 在函数作用域中如何访问全局作用域 一样,那如何在函数作用域访问全局作用域的命名空间?
globals( )
a = 100
b = 'ace'
def fn():
d = 'add'
# globals() 函数可以用来任意位置获取全局命名空间
global_scope = globals()
print(global_scope)
fn()
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1010b71f0>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': '/Usemo02.py', '__cached__': None, 'a': 100, 'b': 'ace', 'fn': }



