6. match 语句

注:match 语句从 python3.10 起用,之前的版本不支持。

作用

match语句是根据一个表达式的值和模式匹配来执行不同的代码块。

match 语句类似于 C 语言中的 switch 语句的功能,但有更强的表达能力和灵活性。

语法

match 目标表达式:
    case 匹配模式1:
        语句块1
    case 匹配模式2:
        语句块2
    ...
    case 匹配模式n:
        语句块n

... 代表 case 子句可以由有0个、1个或多个。

match 语句的各种匹配模式

1. 字面值模式

match语句根据一个表达式的值来自上而下依次对比各个case块中的字面值,如果表达式与字面值相等,则执行case对应的语句块。

match 语句字面值模式同C语言中的switch语句的功能完全一样。

字面值模式语法:

match 目标表达式:
    case 字面值1:
        语句块1
    case 字面值2:
        语句块2
    case 字面值n:
        语句块n

示例

写一个程序,输入“春”、“夏”、“秋”、“冬”四个季节中的任意一个,打印出这个季节在哪几个月。

season = input('请输入季节(春/夏/秋/冬):')
match season:
    case '春':
        print("春季在 1~3 月!")
    case '夏':
        print("夏季在 4~6 月!")
    case '秋':
        print("秋季在 7~9 月!")
    case '冬':
        print("冬季在 10~12 月!")

2. 通配符模式

"_" 是通配符,它可以匹配任何值以及任何模式。

case _ : 通常放在最后,并总会匹配成功。

通配符模式语法:

match 目标表达式:
    case 字面值1:
        语句块1
    case 字面值2:
        语句块2
    case 字面值n:
        语句块n
    case _:
        语句块other

说明

"_" 是软关键字,只用在match语句中有效。

示例

改写上面的示例,实现如下功能:

写一个程序,输入“春”、“夏”、“秋”、“冬”四个季节中的任意一个,打印出这个季节在哪几个月。如果用户输入的不是上述四个季节则提示“您的输入有误”!

season = input('请输入季节(春/夏/秋/冬):')
match season:
    case '春':
        print("春季在 1~3 月!")
    case '夏':
        print("夏季在 4~6 月!")
    case '秋':
        print("秋季在 7~9 月!")
    case '冬':
        print("冬季在 10~12 月!")
    case _:
        print('您的输入有误!')

与第一个示例相比,增加了一个 case _: 子句,这个 _ 就是通配符,能匹配所有其他值!

其他匹配模式

match 语句有 10 种匹配模式,详见官网文档。

https://docs.python.org/zh-cn/3/reference/compound_stmts.html#patterns

视频讲解