Python 3.6 替代多if判断实现range区间匹配的优化方案
改写方案
核心思路是把分散的区间规则整合为统一的有序映射表,通过遍历匹配替代大量并列if判断,逻辑更清晰,也更易维护。
实现代码
# 统一维护区间与对应返回值的映射关系,按区间从小到大排序 LEVEL_RULES = [ (range(1, 10), 12), (range(10, 12), 16), (range(12, 16), 18), (range(16, 18), 29), (range(18, 29), 34), (range(29, 34), 46), (range(34, 46), 54), (range(46, 54), 63), (range(54, 63), 73), (range(63, 73), 85), (range(73, 85), 85), ] def calculate_level(recomendation, level_buy, default=0): if recomendation != "buy": return default # 遍历匹配第一个符合条件的区间,返回对应值 for interval, target_level in LEVEL_RULES: if level_buy in interval: return target_level return default # 调用示例 level_buy = 62 level = calculate_level("buy", level_buy) # 输出结果为73,符合需求
更简洁的函数式写法
可以用next()配合生成器表达式简化查找逻辑,代码更紧凑:
def calculate_level(recomendation, level_buy, default=0): if recomendation != "buy": return default return next( (target_level for interval, target_level in LEVEL_RULES if level_buy in interval), default )
优势说明
- 可读性高:所有区间规则集中在
LEVEL_RULES中,无需逐行查看if判断就能理清对应关系 - 易维护:后续调整区间规则只需要修改
LEVEL_RULES的条目,不需要改动核心逻辑 - 无副作用:逻辑封装为纯函数,输入输出明确,方便复用和单元测试
内容的提问来源于stack exchange,提问作者CodeAgainst
相关产品推荐
相关产品推荐

