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

如何优化含大量范围常量的离心式液体喷射器校验代码?

离心式液体喷射器代码优化方案

问题分析

原代码用多个Enum类存储单个参数的范围阈值,导致类冗余;同时校验逻辑重复,还存在范围引用错误(比如切向输入孔数量的上限错误引用了直径的最大值),维护成本高。

优化思路

  1. 集中管理阈值:用单个数据类替代多个Enum,统一存储所有参数的范围约束,更直观且易修改。
  2. 提取通用校验逻辑:封装重复的范围校验代码,避免重复编写条件判断和错误信息。
  3. 修复逻辑错误:修正原代码中范围引用的错误。

优化后代码

from dataclasses import dataclass, frozen_dataclass

@frozen_dataclass
class InjectorSpecifications:
    """统一存储离心式喷射器的参数范围阈值"""
    # 切向输入孔数量
    min_input_holes: int = 2
    max_input_holes: int = 6
    # 切向输入孔直径
    min_hole_diameter: float = 0.5
    max_hole_diameter: float = 2.5
    # 切向输入孔相对长度
    min_relative_length: float = 1.5
    max_relative_length: float = 6.0

# 全局使用的规格实例,可根据需求修改
INJECTOR_SPECS = InjectorSpecifications()

def validate_parameter_range(value: float | int, min_val: float | int, max_val: float | int, param_name: str) -> None:
    """通用参数范围校验函数"""
    if not (min_val <= value <= max_val):
        raise ValueError(f"参数「{param_name}」的值{value}不在允许范围内 [{min_val}...{max_val}]")

@dataclass(frozen=True, slots=True)
class CentrifugalLiquidInjector:
    outer_diameter_injector: float
    side_wall_thickness_injector: float
    number_input_tangential_holes: int  # 数量应为整数,原代码用float不合理,修正类型
    diameter_input_tangential_holes: float
    length_input_tangential_holes: float
    relative_length_twisting_chamber: float

    def __post_init__(self):
        # 校验切向输入孔数量
        validate_parameter_range(
            self.number_input_tangential_holes,
            INJECTOR_SPECS.min_input_holes,
            INJECTOR_SPECS.max_input_holes,
            "切向输入孔数量"
        )
        # 校验切向输入孔直径
        validate_parameter_range(
            self.diameter_input_tangential_holes,
            INJECTOR_SPECS.min_hole_diameter,
            INJECTOR_SPECS.max_hole_diameter,
            "切向输入孔直径"
        )

    @property
    def diameter_twisting_chamber_injector(self) -> float:
        return self.outer_diameter_injector - 2 * self.side_wall_thickness_injector

    @property
    def relative_length_tangential_hole(self) -> float:
        value_relative_length = self.length_input_tangential_holes / self.diameter_input_tangential_holes
        # 校验相对长度
        validate_parameter_range(
            value_relative_length,
            INJECTOR_SPECS.min_relative_length,
            INJECTOR_SPECS.max_relative_length,
            "切向输入孔相对长度"
        )
        return value_relative_length

优化亮点

  • 阈值集中管理:所有约束都在InjectorSpecifications中,修改阈值只需改动这一个类,无需找多个Enum。
  • 消除重复代码:通用校验函数validate_parameter_range避免了重复编写条件判断和错误信息,代码更简洁。
  • 修复逻辑错误:原代码中切向输入孔数量的上限错误引用了直径最大值,优化后已修正。
  • 类型合理性修正:切向输入孔数量应为整数,原代码用float类型不合理,已调整为int。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:08:15