Python的模式匹配

server/2025/1/12 7:54:01/

python_0">python的模式匹配

当我们使用if...elif...else时,面对较多条件就会出现if...elif...elif...elif...elif...elif...else会写很长的一段代码,导致我们代码的可读性变差。

即针对若干种情况我们可以使用match语句(类似于C语言的switch多分支语句)。

例如我们用学生成绩来展示,一个学生的成绩只能是A、B、C、D:

python">score = 'A'
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语句改写,则改写如下:

python">score = 'A'match score:case 'A':print('score is A.')case 'B':print('score is B.')case 'C':print('score is C.')case _: # _表示匹配到其他任何情况print('score input error.')

使用match语句时,程序会依次使用case匹配,并且在最后可以使用一个“_”来表示任意值。

复杂匹配

match语句除了可以匹配单个的值外,还可以匹配多个值和匹配一定范围,并且把匹配后的值绑定到变量:

python">age = 15match age:case x if x < 10: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.')

示例中第一个case x if x < 10表示当age < 10成立时匹配,且赋值给变量x,第二个case 10仅匹配单个值,第三个case 11|12|...|18能匹配多个值,用|分隔。

匹配列表

match语句还可以匹配列表,功能非常强大。

我们假设用户输入了一个命令,用args = ['gcc', 'hello.c']存储,下面的代码演示了如何用match匹配来解析这个列表:

python">args = ['gcc', 'hello.c', 'world.c']
# args = ['clean']
# args = ['gcc']match args:# 如果仅出现gcc,报错:case ['gcc']:print('gcc: missing source file(s).')# 出现gcc,且至少指定了一个文件:case ['gcc', file1, *files]:print('gcc compile: ' + file1 + ', ' + ', '.join(files))# 仅出现clean:case ['clean']:print('clean')case _:print('invalid command.')

第一个case ['gcc']表示列表仅有'gcc'一个字符串,没有指定文件名,报错;

第二个case ['gcc', file1, *files]表示列表第一个字符串是'gcc',第二个字符串绑定到变量file1,后面的任意个字符串绑定到*files(它表示至少指定一个文件)

第三个case ['clean']表示列表仅有'clean'一个字符串;

最后一个case _表示其他所有情况。


http://www.ppmy.cn/server/157703.html

相关文章

【HarmonyOS Next NAPI 深度探索1】Node.js 和 CC++ 原生扩展简介

【HarmonyOS Next NAPI 深度探索1】Node.js 和 CC 原生扩展简介 如果你用过 Node.js&#xff0c;应该知道它强大的地方在于能处理各种场景&#xff0c;速度还很快。但你有没有想过&#xff0c;Node.js 的速度秘密是什么&#xff1f;今天我们来聊聊其中一个幕后英雄——原生扩展…

CSS语言的网络编程

CSS语言的网络编程 引言 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是一种用于描述HTML或XML文档外观样式的样式表语言。虽然CSS本身并不是一种编程语言&#xff0c;但它在网页设计和开发中发挥着至关重要的作用。随着互联网的发展&#xff0…

Postman接口测试04|批量运行测试用例、参数化、Mock Server、Cookie鉴权、Newman生成测试报告

目录 十一、Postman批量运行测试用例 十二、实现数据驱动&#xff08;也称参数化&#xff09; 1、csv文件 1️⃣编辑csv文件 2️⃣更新参数的值 3️⃣修改测试脚本和断言 5️⃣批量运行测试用例 2、Json文件 1️⃣编辑Json文件 2️⃣其他操作和处理csv文件相同 十三、…

Hypium UIViewer 让 MacOS 与鸿蒙NEXT手机实现多屏协同

鸿蒙工具之Hypium 一、前言二、认识 Hypium三、活用 Hypium 的 UIViewer 一、前言 上图呢&#xff0c;是我用华为平板和华为手机进行多屏协同时的界面。多屏协同的好处有很多&#xff0c;其中一个就是可以对手机上的显示页面&#xff0c;在电脑上直接进行截图&#xff0c;而不是…

后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权

目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器&#xff1f; 总结 …

嵌入式系统Linux实时化(二)Xenomai技术框架分析

Xenomai 是 Linux 内核的一个实时开发框架。它希望通过无缝地集成到Linux 环境中来给用户空间应用程序提供全面的、与接口无关的硬实时性能。Xenomai 项目始于2001年8月&#xff0c;作为一个自由软件项目&#xff0c;完全遵守GNU/Linux自由软件协议。2003 年它和RTAI项目合并推…

Mybatis中 Dao接口和XML文件的SQL如何建立关联

建立连接工作&#xff08;准备&#xff09;: 首先会加载Myatis的配置文件&#xff0c;因为这些配置文件里面包括了数据源的各种配置&#xff0c;然后通过SqlSessionFactory创建一个SqlSession&#xff0c;然后可以通过SqlSession操作数据库。 一、解析XML: 首先&#xff0c;…

Android车机DIY开发之学习篇(二)编译Kernel以正点原子为例

Android车机DIY开发之学习篇(二)编译Kernel以正点原子为例 1.代码在/kernel-5.10文件夹下 2.在kernel-5.10目录下执行如下命令编译 &#xff1a; 编译之前&#xff0c;需要将 clang 导出到 PATH 环境变量&#xff1a; 如果是 Android12 执行下面这条命令 export PATH../pr…