在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条件。