Python如何在变量名中引入另一个变量的取值?
解决方案
方案1:使用字典存储(最推荐)
动态生成独立变量名不符合Python最佳实践,用字典管理同系列变量更易维护、安全性更高。
# 初始化空字典存储所有game_battles相关变量 game_battles = {} for m in range (1,4): if m ==1: suffix = "top" elif m == 2: suffix = "mid" elif m == 3: suffix = "btm" game_battles[suffix] = [["Match", "Winner", suffix]] print(game_battles[suffix]) # 后续使用方式示例 # 取top对应列表:game_battles["top"] # 取mid对应列表:game_battles["mid"]
该方案优势:
- 避免全局命名空间污染
- 遍历、批量操作所有同系列变量更便捷,直接循环
game_battles.items()即可 - 不会出现变量名拼写错误导致的隐性bug
方案2:直接生成全局变量(不推荐,仅作参考)
如果确实需要生成game_battles_top这类独立全局变量,可以用globals()内置函数操作全局命名空间实现:
for m in range (1,4): if m ==1: suffix = "top" elif m == 2: suffix = "mid" elif m == 3: suffix = "btm" # 操作全局命名空间生成变量 globals()[f"game_battles_{suffix}"] = [["Match", "Winner", suffix]] print(globals()[f"game_battles_{suffix}"]) # 后续可以直接用变量名访问 print(game_battles_top) print(game_battles_mid) print(game_battles_btm)
该方案缺陷:
- 容易污染全局命名空间,和其他变量重名会导致难以排查的bug
- 代码静态检查工具无法识别动态生成的变量,会报未定义错误
- 批量操作这类变量比字典方案更繁琐
内容的提问来源于stack exchange,提问作者MWallace
相关产品推荐
相关产品推荐

