在 Python 中,如果我们想要根据不同的条件做出选择,最常见的方法就是使用 if ... elif ... else ...
语句。然而,随着条件越来越多,代码也就变得越来越冗长,读起来既复杂又不方便。那有没有一种更简洁、优雅的方式来做条件匹配呢?当然有!那就是——match
语句!
一、传统的 if...elif...else 判断:长篇大论
比如,我们需要判断一个学生的成绩是 A、B 还是 C。传统的写法可能会这样:
score = 'B'
if score == 'A':
print('Score is A.')
elif score == 'B':
print('Score is B.')
elif score == 'C':
print('Score is C.')
else:
print('Invalid score.')
嗯,这段代码没有错,但是如果成绩类别多了呢?比如你要判断 A 到 F 的成绩,岂不是写得越来越长,越来越难看?别急,match
语句来了,它能让代码变得简洁又有条理!
二、Match 语句:简洁清晰的条件匹配
你可以用 match
语句替换上面的 if-elif-else
。只要这样写,代码一下子就显得清晰又直观:
score = 'B'
match score:
case 'A':
print('Score is A.')
case 'B':
print('Score is B.')
case 'C':
print('Score is C.')
case _:
print('Score is ???.')
看吧!用 match
语句,条件分支就像摆在你面前的菜单一样清晰可见!每个 case
语句就像一个小小的“选择框”,你可以明确匹配每种情况。最后的 case _
表示“其他所有情况”,简直比 else
还要简洁、明了。
三、Match 语句的魔法:复杂匹配
match
语句不止能做简单的匹配,它还可以处理更复杂的情况,比如范围匹配或者多个条件的联合匹配。看看这个例子:
age = 15
match age:
case x if x < 10:
print(f'Age < 10: {x}')
case 10:
print('Age is 10.')
case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:
print('Age is between 11 and 18.')
case 19:
print('Age is 19.')
case _:
print('Age is unknown.')
这里发生了什么?
-
case x if x < 10:
表示如果age
小于 10,那么x
就是这个小小的数字,打印出来; -
case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:
用|
符号连接多个值,表示当age
是这些数之一时就匹配。
这种写法相比 if ... elif
来得更简洁,读起来也不那么复杂了。
四、Match 语句更强大的功能:匹配列表
你以为 match
语句只能匹配简单的数值?错!它还可以用来匹配列表。来看看这个例子:
args = ['gcc', 'hello.c', 'world.c']
match args:
case ['gcc']:
print('gcc: Missing source file(s).')
case ['gcc', file1, *files]:
print(f'gcc compile: {file1}, ' + ', '.join(files))
case ['clean']:
print('Clean command')
case _:
print('Invalid command.')
这里是怎么回事呢?
-
case ['gcc']:
表示如果args
列表只有一个元素'gcc'
,就会输出报错信息; -
case ['gcc', file1, *files]:
表示args
列表以'gcc'
开头,第二个元素绑定到file1
,后面跟着的所有元素都绑定到files
。所以如果命令是['gcc', 'hello.c', 'world.c']
,就会打印出“gcc compile: hello.c, world.c”; -
case ['clean']:
当只有['clean']
这个命令时,执行清理操作; -
最后一个
case _:
捕捉所有其他的情况,确保没有遗漏。
看见没有,match
语句不仅能帮助你快速匹配数值,甚至可以匹配复杂的数据结构,强大得让你忍不住想多写几次!
总结:Match 语句的好处
-
可读性强: 和长篇的
if...elif...else
比,match
语句显得更加简洁、易读。你可以清楚地看到每一个条件的匹配。 -
灵活性高:
match
语句支持多种匹配方式,不仅可以匹配数值、范围,还能匹配列表、元组等复杂类型。 -
易于扩展: 如果以后增加了更多的条件,使用
match
语句时无需再写一堆elif
,直接增加新的case
就好,代码维护更轻松。
动手练习:
-
简易天气判断:
请根据输入的天气类型判断今天适合什么活动。假设天气类型有"sunny"
、"rainy"
、"snowy"
、"windy"
和"cloudy"
,请使用match
来判断并输出合适的活动。例如:
-
"sunny"
适合去跑步 -
"rainy"
适合在家看书 -
"snowy"
适合堆雪人 -
"windy"
适合放风筝 -
"cloudy"
适合散步
-
-
命令解析:
请根据输入的命令(比如args = ['ls', '-l']
)判断该命令是否是有效的,并根据不同的命令类型(如ls
、clean
、gcc
)输出相应的提示信息。
快来动手挑战一下吧!