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

如何循环遍历函数参数,批量处理多组对应变量以简化重复代码

实现方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:07