You need to enable JavaScript to run this app. Python中如何根据变量i的值获取对应var_序号的变量值
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何根据变量i的值获取对应var_序号的变量值

Python 动态拼接变量名取值的实现方案

先还原你提到的基础代码场景:

# 你目前已定义的零散变量
var_1 = 10
var_2 = 20
var_4 = 40
var_5 = 50
i = 4
# 你期望实现的等效逻辑:select_value = var_ + i 最终得到40

Python 不支持 Java 那种直接拼接标识符当变量名的原生写法,实际能用的实现按推荐优先级排序如下:

  • 方案1:替换为字典存储同组变量(最推荐,无副作用)
    本来以var_为前缀的零散变量,本质是一组带编号的关联值,完全没必要散落定义成全局变量,直接用字典把编号当 key 存储就完全匹配需求,写法还最稳妥:
    # 把零散变量收拢到字典
    var_group = {
        1: 10,
        2: 20,
        4: 40,
        5: 50
    }
    i = 4
    select_value = var_group[i]
    print(select_value) # 输出40,符合预期
    
    这种写法没有性能损耗,IDE 还能正常做语法检查,后续新增、删除变量都不会有隐蔽 bug,是 Python 社区处理这类需求的标准做法。
  • 方案2:通过内置命名空间字典查找(不修改原有变量定义时可用)
    Python 的所有全局变量,本身就存储在globals()返回的全局命名空间字典里;函数内部的局部变量,存在locals()返回的局部命名空间字典里。只要拼出完整的变量名字符串,就能直接当 key 取值:
    var_1 = 10
    var_2 = 20
    var_4 = 40
    var_5 = 50
    i = 4
    # 拼接出完整的目标变量名
    target_name = f"var_{i}"
    # 全局变量用globals()查,局部变量换成locals()
    select_value = globals()[target_name]
    print(select_value) # 输出40
    
    注意:如果拼出来的变量名不存在,会直接抛出 KeyError,需要自己加异常判断处理不存在的场景。
  • 方案3:用 eval 执行拼接的表达式(仅临时测试用,不推荐)
    这种写法最贴近你一开始想的“直接拼变量名”的逻辑,靠eval把字符串转成可执行的 Python 表达式取值:
    var_1 = 10
    var_2 = 20
    var_4 = 40
    var_5 = 50
    i = 4
    select_value = eval(f"var_{i}")
    print(select_value) # 同样可以输出40
    
    不推荐在正式项目使用的原因:eval会无差别执行传入的字符串代码,如果拼接的内容来源不可信,会有严重的代码注入风险;哪怕是自己写的拼接字符串,因为完全绕开了 IDE 的静态语法检查,变量名拼错、作用域不对的问题都没法在写代码时提前发现,调试成本很高。

补充提醒:不管是用globals()查还是用eval执行,本质都是绕开 Python 的静态变量校验机制,除非有特殊需求没法改用字典存储,否则优先用第一种字典方案,能少踩很多后续的维护坑。


内容的提问来源于stack exchange,提问作者jlozasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 17:24:03