Python 模式匹配if 的使用时机

37 阅读1分钟

在Python的match case中,case上面什么时候有if,什么时候没有if, if的使用时机如下:

1. 没有if的情况 - 精确匹配值

match status_code:
    case 200:
        print("成功")
    case 404:
        print("未找到")
    case 500:
        print("服务器错误")

2. 有if的情况 - 条件匹配(守卫条件)

match bmi:
    case _ if bmi < 18.5:          # 需要条件判断
        print("过轻")
    case _ if 18.5 <= bmi < 25:    # 需要范围判断
        print("正常")

3. 混合使用

match (x, y):
    case (0, 0):
        print("原点")
    case (0, y) if y > 0:          # 模式匹配 + 条件
        print("Y轴正方向")
    case (x, 0) if x != 0:         # 模式匹配 + 条件
        print("X轴上")

总结:

  • if:当需要基于值的条件判断(范围、比较、复杂逻辑)
  • 不用 if:当只需要精确匹配特定的值或模式
  • if 在case后面:作为"守卫条件",只有模式匹配且条件为真时才执行

在你的BMI例子中,因为需要判断范围,所以每个case都需要if条件。