本文主要介绍Python3.10带来的新特性——match语句。在Python3.10发布之前,Python并没有类似其他语言的switch语句。实现类似功能最简单的方法就是通过if...elif...else...语句,但这毕竟不够优雅。比较“Pythonic”的做法是通过字典(dict)来实现。通过字典间接实现switch通过字典实现条件分支语句,首先需要定义一个字典来表示不同case和返回值/函数之间的映射关系,然后利用字典的特性实现类似switch的功能。下面定义了一个简单的函数,当传入不同的case时,会打印不同的内容。你也可以将打印内容的语句替换成你要执行的函数:defswitch(case):mapping={1:"print('case1')",2:"print('case2')"}returneval(mapping[case])switch(1)results:case1可以看到输出正是我们想要的"case1"的结果。在Python3.10出现之前,我们都是使用上面的字典映射的方式来实现类似switch语句的功能。但是随着Python3.10的发布,Python终于迎来了自己的'switch'语句,也就是我们接下来要重点介绍的match语句。Python3.10新特性——match语句,参考:Python3.10增加了比switch更强大的match表达式在运行以下代码之前,请确保你的Python版本大于等于3.10。和其他语言一样,当变量num满足whichcase的条件时,会执行条件下对应的代码:num=5matchnum:case10:print('youlose')case5:print('youwin')运行结果:默认分支时你赢了#当变量a不满足任何一个case条件时,如果我们不处理“其他”case,那么就不会执行任何操作。下面的代码不会有任何输出,因为a不满足任何条件:num=3matchnum:case1:print('num1')case2:print('num2')nooutput如果你想“其他”case处理,那么写法如下:num=3matchnum:case1:print('num1')case2:print('num2')casedefault:print('casedefault',default)运行结果:casedefault3可以看到,当变量a不满足任何一个条件时,就会运行到我们的default分支,同时将变量值赋值给default变量。注意:这里默认的只是一个变量名,并不是规定的写法,也可以使用其他的变量名,比如x。它的作用是当变量不满足任何一个分支条件时,将变量值赋给变量。在case中使用元组,Python的match语句不仅支持数值类型的分支,还支持其他数据类型,如元组(tuple)a=(2,4)matcha:case(1,2):print('case1')case(2,x):print('case2',x)runningresult:case24可以看到当变量a匹配到第二个分支条件时,也把元组的第二个分支的元素值4被分配给变量x。case中使用判断语句#不仅如此,match语句还支持在分支条件中插入判断语句:a=(2,2)flag=Falsematcha:case(1,2):print('case1')case(2,x)ifflag:print('case2',x)casedefault:print('casedefault',default)运行结果:casedefault(2,2)由于第二个分支条件中的ifflag为False,则不满足条件,所以代码转到最后一个分支条件。总结:以上就是Python3.10的新特性——match语句。
