如何循环遍历函数参数,批量处理多组对应变量以简化重复代码
实现方案
1. 封装重复逻辑为独立函数
首先把重复的计算逻辑抽成公用函数,输入当前场景的马赫数数组和公共参数,直接返回计算得到的压力、温度数组:
import numpy as np def calc_pt(M_list, P1, T1, gamma): n = len(M_list) P_list = np.zeros(n) T_list = np.zeros(n) for i in range(n): P_list[i] = SolveP(P1, M_list[i], gamma) T_list[i] = SolveT(T1, M_list[i], gamma) return P_list, T_list
2. 用容器统一存储所有场景的输入数据
不要单独定义xpoints_3point、ypoints_5point这类带后缀的独立变量,统一用字典存储所有场景的输入,key为场景标识(比如对应点数、场景编号),value为对应场景的x、y数组:
# 仅需维护这一个输入字典,扩展场景时直接新增键值对即可 scene_input = { 3: (xpoints_3point, ypoints_3point), 5: (xpoints_5point, ypoints_5point), 7: (xpoints_7point, ypoints_7point) }
就算扩展到上千个场景,也只需要往这个字典里加条目即可,无需修改后续处理逻辑。
3. 批量循环处理所有场景
循环遍历输入字典,调用封装好的函数计算,结果同样用字典存储,后续可以通过场景标识直接读取对应结果:
# 公共全局参数 T1 = 298 # 入口温度,单位K P1 = 10 # 入口压力,单位atm gamma = 1.4 # 存储所有场景的计算结果 scene_result = {} for scene_id, (xpoints, ypoints) in scene_input.items(): M_list = ypoints P_list, T_list = calc_pt(M_list, P1, T1, gamma) scene_result[scene_id] = { "xpoints": xpoints, "ypoints": ypoints, "M_list": M_list, "P_list": P_list, "T_list": T_list } # 读取结果示例:获取3point场景的压力数组 P_list_3point = scene_result[3]["P_list"]
可选性能优化
如果你的SolveP、SolveT函数支持传入numpy数组作为参数,可直接用向量化操作替代显式for循环,计算效率会有明显提升:
def calc_pt_vectorized(M_list, P1, T1, gamma): # 无需逐元素循环,直接传入数组计算 P_list = SolveP(P1, M_list, gamma) T_list = SolveT(T1, M_list, gamma) return P_list, T_list
内容的提问来源于stack exchange,提问作者Fil
相关产品推荐
相关产品推荐

