当前位置: 首页 > 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.rkmt.cn/news/88187.html

相关文章:

  • 自动化用户体验指标监控:提升软件测试的全新维度
  • Story-Adapter终极指南:5分钟快速上手长故事可视化工具
  • 如何快速掌握MediaPipeUnityPlugin:Unity开发者的完整集成指南
  • SQL必会必知整理-05-数据过滤
  • 高校宿舍电气安全新防线:浅析电气防火限流式保护技术
  • VRM与VRChat模型互转终极指南:免费工具快速上手教程
  • 运维太苦了,别硬扛!转网安才是“越老越吃香”的破局路!
  • 16、AWS Lambda:强大功能与应用案例深度解析
  • 为什么你的异步代码总是出bug?
  • Adobe Experience Manager 存储型XSS漏洞深度解析与缓解指南
  • NatTypeTester终极指南:快速检测网络NAT类型的完整解决方案
  • 2025年12月甘肃高考复读班机构TOP5优选指南-合规平台助力升学冲刺 - 深度智识库
  • 2025年水冷/风冷/小型氙灯老化试验箱哪个品牌的好?UV紫外老化试验箱哪家好?十大优质厂家排名 - 品牌推荐大师1
  • 2025年阳光板、PC阳光板、耐力板源头生产厂家最新实力推荐,亲测解析! - 深度智识库
  • 在WebStorm中合并分支
  • nvcc编译器安装
  • 散修带你入门鸿蒙应用开发基础第十节:接口的核心约束与契约设计 - 鸿蒙
  • 致臻制造,温柔以待:2025年优质柔性“手指夹爪”供应商深度解析 - 品牌2025
  • 2025年丰收膜供货商权威推荐榜单:增产膜/西瓜增产农膜/防尘农膜实力供货商精选 - 品牌推荐官
  • 地理坐标计算神器:Geodesy库的完整使用指南
  • 炉石传说智能脚本实战攻略:从零开始掌握自动化卡牌对战
  • 2025年汽车海外营销推广服务商推荐,助力外贸企业通过 Facebook、LinkedIn、TikTok 、INS、Google低成本营销推广高效获客 - 品牌2025
  • Unity角色移动系统完整解析:从《原神》到你的游戏项目
  • 酒店装修哪家公司靠谱?国内实力企业推荐 - 品牌排行榜
  • EPC办公室装修公司推荐:行业优质服务盘点 - 品牌排行榜
  • 2025年和平做得好的车衣改色团购选哪家,汽车车衣/汽车贴膜/隐形车衣/贴车衣/贴太阳膜/太阳膜/贴隐形车衣/车衣改色团购推荐 - 品牌推荐师
  • AI 训练素材、数据集供应商推荐:卓特视觉 - 品牌2026
  • C++ 语言特性的变更可能让你的防御成为马奇诺防线
  • 2025年远传水表批发厂家推荐榜单:水表‌/插卡水表‌/热量表源头厂家精选 - 品牌推荐官
  • 崖山数据库使用教程