如何访问Python中通过globals()创建的动态变量以执行相关操作
问题根因
你当前采用直接写入globals()全局命名空间创建动态变量的方式本身属于不推荐的实现方案,你遇到的报错本质是Python无法直接将拼接生成的字符串自动识别为变量名,因此无法正常读取对应变量。
推荐解决方案
优先放弃动态创建全局变量的实现思路,改用列表或字典存储生成的Node实例,适配可变的变量数量需求:
方案1:使用列表存储(最推荐)
创建时直接把所有Node实例存入列表,后续通过索引访问即可:
# 创建逻辑 nodes = [] for n in range(entity_count): nodes.append(Node(list_for_nodesType[n], name=list_for_nodesName[n])) # 访问逻辑,比如同时使用第1、2个实例 var1 = nodes[0] var2 = nodes[1] # 执行对应操作即可
列表的长度会自动跟随entity_count变化,无需手动处理变量命名问题。
方案2:使用字典存储(需要按名称匹配时使用)
如果需要保留nodeX的命名标识,可使用字典做键值映射:
# 创建逻辑 node_map = {} for n in range(entity_count): node_map[f'node{n}'] = Node(list_for_nodesType[n], name=list_for_nodesName[n]) # 访问逻辑 var1 = node_map['node0'] var2 = node_map['node1']
方案3:兼容原有全局变量实现(不推荐)
如果必须沿用之前写全局变量的逻辑,可继续通过globals()读取对应变量:
# 读取第n个动态变量 target_var = globals()[f'node{n}'] # 同时读取两个变量示例 var1 = globals()['node0'] var2 = globals()['node1']
注意:该方案会污染全局命名空间,容易出现变量冲突、调试难度大等问题,非必要不使用。
内容的提问来源于stack exchange,提问作者Faizan Ahmad
相关产品推荐
相关产品推荐

