跳转到主内容
极星编程网:以代码为星,赴技术山海!

Python模式匹配match case的实现

目录核心概念

1. 基本match语句

2. 复杂匹配模式

3. 高级应用:匹配列表(解包匹配)

总结要点将之前的练习题 重新写一写核心概念当程序需要针对一个变量的多种可能值进行判断时,传统的if ... elif ... elif ... else结构会变得冗长且可读性较差。Python 3.10 引入了match语句(也称为模式匹配),它提供了一种更简洁、更直观的方式来处理多分支条件判断。

1. 基本match语句

功能:将一个目标(如变量)与一系列模式(case)进行比较,并执行第一个匹配成功的分支。

与传统if对比:if 写法(冗长):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.')match 写法(清晰):score = 'B'match score:case 'A':print('score is A.') case 'B':print('score is B.') case 'C':print('score is C.') case _: # `_` 是通配符,匹配任何值print('invalid score.')关键点:-case _:必须放在最后,用于捕获所有未被前面 case 匹配的情况,类似于else。

语法结构更加规整,意图更明确。

2. 复杂匹配模式

match的强大之处在于其灵活的匹配模式,远不止简单的相等判断。

带守卫条件的匹配:使用if在case内进行额外条件检查。

多值匹配:使用|(或)来匹配多个值。

值绑定:在匹配的同时,将匹配到的值捕获到变量中。

示例:age = 15

match age:case x if x < 10: # 匹配所有小于10的值,并将其绑定到变量x print(f'< 10 years old: {x}') case 10: # 精确匹配单个值print('10 years old.') case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18: # 匹配多个值print('11~18 years old.') case 19:print('19 years old.') case _:print('not sure.')

3. 高级应用:匹配列表(解包匹配)

match语句可以匹配复杂的数据结构,如列表,并能进行解包操作,这使其功能非常强大。

示例:解析命令行参数args = ['gcc', 'hello.c', 'world.c'] # 模拟用户输入的命令

match args:# 模式1: 列表只包含一个元素'gcc'case ['gcc']:print('gcc: missing source file(s).')

# 模式2: 列表第一个元素是'gcc',第二个是任意值(绑定到file1),后面是0个或多个值(绑定到files) case ['gcc', file1, *files]:print(f'gcc compile: {file1}, {", ".join(files)}')

# 模式3: 列表只包含一个元素'clean'case ['clean']:print('clean')

# 默认情况case _:print('invalid command.')*files:这是一个通配符,它可以捕获列表中的零个或多个剩余元素。这使得匹配可变长度的列表变得非常简单。

工作原理:match会按顺序尝试匹配每个case的模式。例如,对于['gcc', 'hello.c', 'world.c'],它会匹配第二个模式,并赋值file1 = 'hello.c'和files = ['world.c']。

总结要点为什么使用match:替代冗长的if-elif-else链,极大地提高代码的可读性和简洁性,尤其是在处理多个枚举值或复杂数据结构时。

基本语法:使用match TARGET:和一系列case PATTERN:进行匹配。

强大功能:精确匹配:case 'A':或匹配:case 11 | 12 | 13:守卫条件:case x if x < 10:通配符:case _:(匹配任何值)

解包匹配:case ['cmd', arg1, *args]:(匹配并提取列表内容)

适用场景:处理状态码、命令解析、处理JSON或嵌套数据等任何需要多分支判断的场景。

match语句是Python现代化的重要特性,掌握它可以让你的代码更加优雅和Pythonic。

将之前的练习题 重新写一写hight = 1.50 weight = 50.5 bmi = weight / hight ** 2 print("bmi=", bmi)

match bmi:case _ if bmi < 18.5:print("过轻") case _ if 18.5 <= bmi < 25:print("正常") case _ if 25 <= bmi < 28:print("过重") case _ if 28 <= bmi < 32:print('肥胖') case _:print("严重肥胖")到此这篇关于Python模式匹配match case的实现的文章就介绍到这了,更多相关Python模式匹配match case内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Python中match...case模式匹配结构实现Python条件语句match-case的具体使用python之流程控制语句match-case详解Python3.10中match-case的用法和示例详解深入理解最新Python中的Match Case

相关文章