You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何通过循环读取不同命名变量并执行运算操作

解决方案

你遇到的问题是拼接得到的只是变量名字符串,没有映射到实际绑定的变量值,有两种可落地的实现方式,优先推荐第一种。

推荐方案:用字典统一管理同组变量

动态拼接变量名本身是Python里不推荐的写法,同类型、同逻辑组的变量从一开始就存在字典里,后续循环调用不需要做任何动态查找,还能完整保留变量原有类型,不会出现作用域找不到变量的问题:

  • 针对T_1到T_5数组的场景:
# 初始化时把同组数组存入字典,key为对应编号
T_group = {
    1: T_1,
    2: T_2,
    3: T_3,
    4: T_4,
    5: T_5
}

for run in range(1, 6):
    Tr = T_group[run]
    # Tr直接对应T_1到T_5的原始float64数组,类型不变,可直接执行后续操作
  • 针对Tr_data_f*变量的场景:
# 按规则把所有Tr_data_f开头的变量存入字典
Tr_data_group = {
    5: Dataset[332, 4]
    # 其余f1-f4的变量值按相同规则存入即可
}

for run in range(1, 6):
    Tr_data = Tr_data_group[run]
    # 直接拿到对应变量的实际值,不会返回字符串

临时方案:通过作用域字典查找已定义的变量

如果变量已经提前定义完成,不想重构代码调整存储方式,可以直接通过Python内置的作用域映射字典取值,不需要做字符串转义或者执行动态代码:

  • 全局作用域下定义的变量,用globals()取值,返回结果是全局变量名到变量值的映射字典:
# T系列变量场景
for run in range(1, 6):
    Tr = globals()[f"T_{run}"]
    # 取到的Tr就是原始float64数组
# Tr_data系列变量场景
Tr_data_f5 = Dataset[332, 4]

for run in range(1, 6):
    var_name = f"Tr_data_f{run}"
    Tr_data = globals()[var_name]
    # 直接获取对应变量的实际值
  • 如果变量是在函数内部定义的局部变量,把上面的globals()换成locals()即可。

注意:不要用eval()拼接字符串执行的方式取值,存在安全隐患,且调试难度高,完全没有必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:18:47