结论:match 是结构化模式匹配——不只是值比较,还能按结构拆解数据(序列、映射、对象属性)并绑定变量,支持守卫条件;if-elif 只能做布尔判断。它对标的是函数式语言的 destructuring + switch 的合体,核心价值是把"判断形状 + 取出内容"写成一步。

展开:模式种类:字面值、捕获(case x 绑定变量)、通配 _、序列模式(case [first, *rest])、映射模式(case {"type": "click", "x": x}——不要求键穷尽)、类模式(case Point(x=0, y=0))、或模式 |as 绑定、守卫 if。最大陷阱是裸名字是捕获而非比较——case RED: 会把任意值绑定给 RED 而不是与常量 RED 比较,与常量比较必须写成带点的名字(case Color.RED:)或字面值。其次易错:case int(): 匹配任何 int 实例(类模式),不是匹配空;__match_args__ 让自定义类支持位置模式。性能上 match 并不魔法,等价于一串 isinstance/解构检查,选择它是为了表达力而非速度。

match command.split():
    case ["quit"]:
        break
    case ["go", direction] if direction in {"n", "s", "e", "w"}:
        move(direction)
    case ["drop", *items]:
        drop(items)
    case _:
        print("无法解析")

追问方向:模式匹配的穷尽性检查(静态工具如 mypy 对 enum/union 的检查)、与 Visitor 模式的替代关系。