Python 内建函数列表 > Python 的内置函数 globals
Python 的内置函数 globals() 是一个非常重要的工具函数,它返回一个字典,表示当前全局符号表。这个字典包含了当前模块中定义的所有全局变量、函数和类的名称及其对应的值。
1def globals(): 2 ''' 3 返回实现当前模块命名空间的字典 4 5 :return: 当前模块命名空间的字典 6 ''' 7
具体来说:
- 返回值是一个字典对象
- 字典的键是变量名或函数名(字符串形式)
- 字典的值是对应的对象引用
- 修改这个字典会直接影响全局命名空间
典型应用场景包括:
- 动态访问或修改全局变量
- 调试时查看当前全局状态
- 框架开发中实现动态功能
示例用法:
1x = 10 2y = "hello" 3 4def func(): 5 pass 6 7# 获取全局变量字典 8g = globals() 9 10# 访问全局变量 11print(g["x"]) # 输出: 10 12print(g["y"]) # 输出: "hello" 13 14# 修改全局变量 15g["x"] = 20 16print(x) # 输出: 20 17 18# 添加新全局变量 19g["z"] = [1, 2, 3] 20print(z) # 输出: [1, 2, 3] 21
注意事项:
- 在函数内部使用时,
globals()仍然返回模块级的全局变量,而不是函数的局部变量。例如:
1x = 10 # 全局变量 2def test(): 3 y = 20 # 局部变量 4 print(globals()) # 输出包含x但不包含y 5test() 6
这个特性与 local() 形成鲜明对比,后者在函数内部调用时会返回函数的局部命名空间。
1def outer(): 2 def inner(): 3 print(globals()) # 与模块级调用结果相同 4 inner() 5outer() 6
这种可预测的行为使得 globals() 比 locals() 更适合在嵌套环境中使用。
- 虽然
globals()提供了便利的全局变量访问方式,但过度使用可能会使代码变得难以维护:
- 它会破坏代码的封装性,使得函数不再自包含
- 可能导致难以追踪的变量修改
- 增加代码的耦合度
建议仅在以下场景谨慎使用:
1# 合理的使用示例:动态配置 2CONFIG = {'debug': True} 3 4def process_data(): 5 if globals().get('CONFIG', {}).get('debug'): 6 print("Debug mode enabled") 7
在其他情况下,更推荐使用显式的参数传递或类属性访问。
在框架开发中,globals() 常用于实现插件系统或动态加载功能,允许在运行时注册新的全局对象。
《Python 的内置函数 globals》 是转载文章,点击查看原文。