python3 globals() 函数
python3 globals() 函数
globals().items() 是 Python 中一个非常有用的内置函数组合,用于获取当前全局命名空间中的所有变量和它们的值。
基本用法
# 定义一些全局变量
x = 10
y = "hello"
z = [1, 2, 3]
def my_func():
return "I'm a function"
class MyClass:
pass
# 查看全局命名空间
print("全局变量:")
for name, value in globals().items():
print(f"{name}: {type(value).__name__}")
实际应用示例
示例1:查看所有内置函数和变量
# 查看所有以双下划线开头的内置属性
print("内置属性:")
for key, value in globals().items():
if key.startswith('__'):
print(f"{key}: {value}")
示例2:动态查找和操作变量
# 创建一些变量
var1 = 100
var2 = 200
var3 = 300
# 动态查找所有以'var'开头的变量
print("以'var'开头的变量:")
for name, value in globals().items():
if name.startswith('var'):
print(f"{name} = {value}")
示例3:调试时查看变量状态
def debug_function():
local_var = "inside function"
# 在函数内部查看全局变量
print("函数内部的全局变量:")
for name, value in globals().items():
if not name.startswith('__') and not callable(value):
print(f" {name}: {value}")
debug_function()
示例4:动态创建和修改变量
# 动态创建变量
for i in range(5):
globals()[f'dynamic_var_{i}'] = i * 10
# 查看动态创建的变量
print("动态创建的变量:")
for name, value in globals().items():
if name.startswith('dynamic_var'):
print(f"{name} = {value}")
# 动态修改变量
if 'dynamic_var_2' in globals():
globals()['dynamic_var_2'] = 999
print(f"修改后: dynamic_var_2 = {dynamic_var_2}")
示例5:清理特定变量
# 创建一些测试变量
temp1 = "to delete"
temp2 = "to keep"
important_var = "don't delete"
# 删除所有以'temp'开头的变量
to_delete = []
for name in globals().keys():
if name.startswith('temp'):
to_delete.append(name)
for name in to_delete:
del globals()[name]
print("删除后剩余的变量:")
for name in globals().keys():
if not name.startswith('__'):
print(f" {name}")
注意事项
- 与 locals() 的区别
def compare_globals_locals():
local_var = "I'm local"
global global_var
global_var = "I'm global"
print("locals():")
for k, v in locals().items():
print(f" {k}: {v}")
print("\nglobals() 中的函数相关变量:")
for k, v in globals().items():
if k in ['local_var', 'global_var', 'compare_globals_locals']:
print(f" {k}: {v}")
compare_globals_locals()
- 性能考虑
import time
# globals() 调用有一定开销,避免在循环中频繁调用
start = time.time()
for _ in range(10000):
g = globals()
end = time.time()
print(f"调用10000次耗时: {end-start:.4f}秒")
- 安全警告
# 危险:不要接受用户输入直接操作 globals()
user_input = "__import__('os').system('rm -rf /')" # 恶意代码
# 绝对不要这样做!
# exec(user_input, globals()) # 这会导致灾难性后果
实用技巧
技巧1:统计变量信息
def analyze_globals():
"""分析全局命名空间"""
g = globals()
stats = {
'total': len(g),
'variables': 0,
'functions': 0,
'classes': 0,
'modules': 0,
'builtins': 0
}
for name, value in g.items():
if name.startswith('__'):
stats['builtins'] += 1
elif callable(value):
if isinstance(value, type):
stats['classes'] += 1
else:
stats['functions'] += 1
elif hasattr(value, '__spec__'): # 模块
stats['modules'] += 1
else:
stats['variables'] += 1
return stats
print("全局命名空间分析:")
for key, value in analyze_globals().items():
print(f" {key}: {value}")
技巧2:创建配置管理器
class ConfigManager:
@classmethod
def get_configs(cls, prefix='CONFIG_'):
"""获取所有以指定前缀开头的配置变量"""
configs = {}
for name, value in globals().items():
if name.startswith(prefix):
config_name = name[len(prefix):].lower()
configs[config_name] = value
return configs
# 定义配置
CONFIG_DATABASE = "localhost"
CONFIG_PORT = 3306
CONFIG_DEBUG = True
# 获取配置
configs = ConfigManager.get_configs('CONFIG_')
print("配置信息:", configs)
总结
globals().items() 是一个强大的工具,主要用于:
- 调试:查看当前命名空间状态
- 元编程:动态操作变量
- 配置管理:收集配置信息
- 清理工作:批量删除变量
重要提醒:
- 谨慎使用,特别是在生产代码中
- 避免接受外部输入操作 globals()
- 理解其与 locals() 的区别
- 注意性能影响,避免在关键循环中使用

浙公网安备 33010602011771号