命名空间(namespace)
1.命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名空间当中
2.每一个作用域都会有一个它对应的命名空间
3.全局命名空间,用来保存全局变量。函数命名空间用来保存函数中的变量
4.命名空间实际上就是一个字典,是一个专门用来存储变量的字典
locals()用来获取当前作用域的命名空间
1.在全局作用域中调用locals()则获取-全局命名空间,
2.在函数作用域中调用locals()则获取-函数命名空间
3.它返回的是一个字典
globals() 函数可以用来在任意位置获取全局命名空间
没有定义函数中
a = [1,2,3]
b = (4,5,6)
c = {'c1':'7','c2':'8'}
dalao = locals() # 当前命名空间
print(locals()) # 打印结果为{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x01918E20>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\Administrator\\102901.py', '__cached__': None, 'a': [1, 2, 3], 'b': (4, 5, 6), 'c': {'c1': '7', 'c2': '8'}, 'dalao': {...}}
print(dalao) # 打印结果为{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x01918E20>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\Administrator\\102901.py', '__cached__': None, 'a': [1, 2, 3], 'b': (4, 5, 6), 'c': {'c1': '7', 'c2': '8'}, 'dalao': {...}}
print(type(dalao))# 打印结果为 <class 'dict'>
'''
返回的是一个字典,那么就可以向字典中添加key-value就相当于在全局中创建了一个变量(一般不建议这么做)
'a': [1, 2, 3], 'b': (4, 5, 6), 'c': {'c1': '7', 'c2': '8'}, 'dalao': {...}}
'''
print(a) # 打印结果为[1, 2, 3]
print(dalao['a']) # 打印结果为[1, 2, 3]
'''向dalao中修改一个key-value'''
dalao['c'] = 1000 # 向字典中添加key-value就相当于在全局中创建了一个变量(一般不建议这么做)
print(c) # 打印结果为1000
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
有定义的函数中
a = 1
def fn1():
a = 10
print(locals()) # 输出函数内的字典# 在函数内部调用locals()会获取到函数的命名空间
locals()['b'] = 20 # 可以通过方法来操作函数的命名空间,但是也是不建议这么做
print(locals()) # 输出函数内的字典# 在函数内部调用locals()会获取到函数的命名空间
fn1()
'''结果为
{'a': 10}
{'a': 10, 'b': 20}
'''
print(locals()) # 输出全局的字典
'''结果为
{'__name__': '__main__',
'__doc__': None,
'__package__': None,
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x029DAF58>,
'__spec__': None,
'__annotations__': {},
'__builtins__': <module 'builtins' (built-in)>,
'__file__': 'C:\\Users\\Administrator\\Desktop\\102902.py',
'__cached__': None,
'a': 1,
'fn1': <function fn1 at 0x02DEF3D0>}
'''
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
globals() 函数可以用来在任意位置获取全局命名空间
例子:
a = 1
def fn1():
a = 10
print(locals())# 第1次打印内部的命名空间字典
print(globals())# 第一次打印全局变量
globals()['a'] = 20 # 在函数内修改全局变量的内容
print(globals())# 第二次打印全局变量
print(locals()) # 第2次打印内部的命名空间字典
fn1()
# 输出结果为
{'a': 10}
{省略内容, 'a': 1, 'fn1': <function fn1 at 0x02BFF3D0>}
{省略内容, 'a': 20, 'fn1': <function fn1 at 0x02BFF3D0>}
{'a': 10}
# 省略内容
'''
完整的第一次打印全局变量
省略内容开始
{'__name__': '__main__',
'__doc__': None,
'__package__': None,
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x007BAF58>,
'__spec__': None,
'__annotations__': {},
'__builtins__': <module 'builtins' (built-in)>,
'__file__': 'C:\\Users\\Administrator\\Desktop\\102902.py',
'__cached__': None,# 结束省略内容
'a': 1,
'fn1': <function fn1 at 0x022FF3D0>}
'''
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31