(十六)模式匹配与赋值表达式
1. match 按结构选择操作
一个菜单命令可能是一项,也可能由“命令和内容”两项组成。拆包能够读懂这种结构,模式匹配可以进一步按结构选择分支:
# 用列表模拟一条已经切分的命令。
parts = ["add", "Python"]
match parts:
case ["add", title]:
print("添加", title)
case ["list"]:
print("显示清单")
case ["quit"]:
print("退出")
case _:
print("无法识别这条命令")case ["add", title] 同时检查两个条件:结构有两项,第一项内容为 "add";然后把第二项捕获到 title。它不是把整个命令拿去和一个固定列表简单比较。case _ 在模式位置是通配符,接收前面没有匹配的情况,不建立一个新的捕获名称。
匹配顺序从上往下,执行第一个成功的分支。把 parts 改成 ["add"],第一项虽然正确,但缺少第二项,最后会显示无法识别。模式中的普通名字表示捕获;要比较固定命令内容,像示例一样写字符串字面量。
2. := 让判断使用并保留一次计算结果
# 先计算长度,保存后再判断,这是展开的写法。
title = "Python 入门"
size = len(title)
if size > 6:
print("较长书名", size)希望在判断处完成这次赋值时,可以写成:
# 括号内先求 len 的值并绑定 size,外面继续比较这个值。
title = "Python 入门"
if (size := len(title)) > 6:
print("较长书名", size):= 是赋值表达式,既保存计算结果,又把结果交给外面的表达式继续使用。普通 = 是赋值语句里的写法,不能直接写成 if size = len(title)。先学会把判断与更新分开,读到 := 时就能恢复它的执行步骤。