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
相关产品推荐
相关产品推荐

