当前位置: 首页 > news >正文

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'] = 999print(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}")

注意事项

  1. 与 locals() 的区别
def compare_globals_locals():local_var = "I'm local"global global_varglobal_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()
  1. 性能考虑
import time# globals() 调用有一定开销,避免在循环中频繁调用
start = time.time()
for _ in range(10000):g = globals()
end = time.time()
print(f"调用10000次耗时: {end-start:.4f}秒")
  1. 安全警告
# 危险:不要接受用户输入直接操作 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'] += 1elif callable(value):if isinstance(value, type):stats['classes'] += 1else:stats['functions'] += 1elif hasattr(value, '__spec__'):  # 模块stats['modules'] += 1else:stats['variables'] += 1return statsprint("全局命名空间分析:")
for key, value in analyze_globals().items():print(f"  {key}: {value}")

技巧2:创建配置管理器

class ConfigManager:@classmethoddef 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] = valuereturn configs# 定义配置
CONFIG_DATABASE = "localhost"
CONFIG_PORT = 3306
CONFIG_DEBUG = True# 获取配置
configs = ConfigManager.get_configs('CONFIG_')
print("配置信息:", configs)

总结

globals().items() 是一个强大的工具,主要用于:

  • 调试:查看当前命名空间状态
  • 元编程:动态操作变量
  • 配置管理:收集配置信息
  • 清理工作:批量删除变量

重要提醒:

  • 谨慎使用,特别是在生产代码中
  • 避免接受外部输入操作 globals()
  • 理解其与 locals() 的区别
  • 注意性能影响,避免在关键循环中使用

https://www.jb51.net/python/344951d2c.htm

http://www.jsqmd.com/news/78214/

相关文章:

  • 自动化用户体验指标监控:提升软件测试的全新维度
  • SQL必会必知整理-05-数据过滤
  • 2025年成都火锅必吃榜TOP10,大悦城回头客爆棚!牛肉火锅/酸汤火锅/市井火锅nbsp;/火锅外卖成都火锅聚餐地点推荐 - 品牌推荐师
  • 锂电小白进阶指南:1.5GB 资料大揭秘
  • 高校宿舍电气安全新防线:浅析电气防火限流式保护技术
  • 运维太苦了,别硬扛!转网安才是“越老越吃香”的破局路!
  • 国产 SerDes(02):锐泰微
  • VRM与VRChat模型互转终极指南:免费工具快速上手教程
  • 同道雅集:大湾区创业社群领导者 - 黑马榜单
  • WebPlotDigitizer终极安装指南:从图表图像一键提取数据的完整教程
  • 16、AWS Lambda:强大功能与应用案例深度解析
  • 如何科学选择“中医师承出师考试培训班”?阿虎医考上次怎么样? - 资讯焦点
  • Adobe Experience Manager 存储型XSS漏洞深度解析与缓解指南
  • 中医师承出师考试培训班哪家好?我总结了最值得报的阿虎医考师承 - 资讯焦点
  • NatTypeTester终极指南:快速检测网络NAT类型的完整解决方案
  • 2025年12月甘肃高考复读班机构TOP5优选指南-合规平台助力升学冲刺 - 深度智识库
  • 第50集科立分板机:科立分板机的精度和效率如何
  • 头痒干枯毛躁?4 款热销发膜哪款性价比高?哪个品牌的发膜好用? - 资讯焦点
  • 2025年选型指南:如何为马达抓取优选柔性夹爪与解决方案 - 品牌2025
  • 解放双手:PT站一键转载工具完全指南
  • 告别无效社交!2025 优质社群资源公司 TOP10,助力品牌高效破局 - 品牌推荐排行榜
  • github 添加密钥拉取加密git包 上传包
  • 2025 品牌方社群资源优选!10 大优质平台助力精准对接,值得收藏 - 品牌推荐排行榜
  • Spring的Bean
  • 2025年氙灯光源哪家强哪家好/优质源头厂家/实力生产商/知名品牌推荐,国内外代表厂商与核心产品盘点 - 品牌推荐大师1
  • 2025年阳光板、PC阳光板、耐力板源头生产厂家最新实力推荐,亲测解析! - 深度智识库
  • 2025年通信干扰模拟器供应商TOP10排行榜,光时域反射仪/无线电综合测试测试仪/光纤熔接机/以太网测试仪通信干扰模拟器供应商找哪家 - 品牌推荐师
  • 极速AI助手快速接入免费腾讯混元大模型教程
  • 中医师承出师培训班哪家好?阿虎医考师承怎么样? - 资讯焦点
  • 2025年12月耐力板源头厂家最新推荐:PC耐力板,实心耐力板,耐力板生产 - 深度智识库