如何将Python多分支判断的搜索逻辑优化为单分支实现?
优化多分支代码为单分支实现
你的代码核心问题是重复逻辑过多,三个分支的执行流程完全一致,仅目标字段和验证函数不同。可以通过字段-验证函数映射+循环遍历的方式将多分支合并为单分支逻辑,同时还能减少重复调用extract_blocks的冗余操作。
优化后的代码如下:
class Searching_section(BaseModel): Hostname: Union[str, None] = None IP: Union[str, None] = None MAC: Union[str, None] = None def search_select(search_option: Searching_section): # 按原代码的优先级,定义字段与对应验证函数的映射 field_validator_pairs = [ ("Hostname", Hostname_Validation), ("MAC", MAC_Validation), ("IP", IP_Validation) ] for field_name, validator in field_validator_pairs: # 动态获取当前字段的值 target_value = getattr(search_option, field_name) # 验证值非空且符合规则 if target_value is not None and validator(target_value): # 仅在找到有效查询条件时才读取配置文件 blocks, others = extract_blocks(app.conf_file_path) # 统一执行过滤与打印 matched_blocks = [block for block in blocks if target_value in block] print(matched_blocks) break # 找到第一个符合条件的查询项后退出,对应原elif的排他逻辑
关键优化点:
- 用
field_validator_pairs列表维护查询字段与验证函数的对应关系,顺序严格对应原代码的if-elif优先级 - 通过
getattr动态获取实例字段值,避免硬编码字段名,后续新增字段只需在映射列表中添加即可 - 将
extract_blocks的调用移到循环内部的有效分支中,原代码每个分支都重复读取配置文件,优化后仅读取一次,减少IO开销 - 循环中找到第一个有效条件后立即break,完全复刻原代码的排他执行逻辑
内容的提问来源于stack exchange,提问作者Thomas Jonathan Jackson
相关产品推荐
相关产品推荐

