Python 教程(七):match...case 模式匹配
目录
- 专栏列表
- 前言
- 基本语法
- match 语句
- case 语句
- 模式匹配的类型
- 示例
- 具体值匹配
- 类型匹配
- 序列匹配
- 星号表达式
- 命名变量
- 复杂匹配
- 模式匹配的优势
- 总结
专栏列表
- Python教程(一):环境搭建及PyCharm安装
- Python 教程(二):语法与数据结构
- Python 教程(三):字符串特性大全
- Python 教程(四):Python运算符合集
- Python 教程(五):理解条件语句和循环结构
- Python 教程(六):函数式编程
- Python 教程(七):match…case 模式匹配

正文开始,如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖
前言
在 Python 中,match 和 case 是一种新的语法结构,首次出现在 Python 3.10 中。这种结构提供了一种类似于其他编程语言中 switch 或 case 的功能,允许基于不同条件执行不同的代码块。
基本语法
match 语句
match 语句是 Python 中的模式匹配语句,它允许你将一个值与多个模式进行匹配,并根据匹配结果执行相应的代码块。
match value:case pattern1:code_block1case pattern2:code_block2...case _:default_code_block
case 语句
case 语句是 match 语句的一部分,用于定义一个或多个模式,当 match 语句中的值与这些模式匹配时,将执行相应的代码块。
模式匹配的类型
- 具体值匹配:匹配一个具体的值。
- 类型匹配:匹配一个特定的数据类型。
- 序列匹配:匹配一个序列,例如列表或元组。
- 星号表达式:匹配序列中的部分元素。
- 命名变量:在模式中使用变量名,将匹配的值赋给这些变量。
- 复杂匹配: 可以匹配多个值、匹配一定范围,并且把匹配后的值绑定到变量
示例
具体值匹配
某个学生的成绩只能是 A、B、C,用
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('score is ???.')
类型匹配
def match_type(value):match value:case int():print("这是一个整数")case float():print("这是一个浮点数")case str():print("这是一个字符串")case _:print("未知类型")match_type(10) # 输出:这是一个整数
match_type(3.14) # 输出:这是一个浮点数
match_type("hello") # 输出:这是一个字符串
match_type([1, 2, 3]) # 输出:未知类型

序列匹配
def match_sequence(value):match value:case [1, 2, 3]:print("匹配到 [1, 2, 3]")case (1, num):print("匹配到元组,第一个元素为 1",'第二个数', num)case [1, *rest]:print(f"匹配到以 1 开头的列表,其余元素为 {rest}")case _:print("匹配到其他值")match_sequence([1, 2, 3]) # 输出:匹配到 [1, 2, 3]
match_sequence([1, 4, 5]) # 输出:匹配到以 1 开头的列表,其余元素为 [4, 5]
match_sequence((1, 2)) # 输出:匹配到元组,第一个元素为 1 第二个数 2
match_sequence("hello") # 输出:匹配到其他值

星号表达式
def match_sequence(value):match value:case [1, *rest]:print(f"匹配到以 1 开头的列表,其余元素为 {rest}")case _:print("匹配到其他值")match_sequence([1, 2, 3]) # 输出:匹配到以 1 开头的列表,其余元素为 [2, 3]
match_sequence([1, 4, 5]) # 输出:匹配到以 1 开头的列表,其余元素为 [4, 5]

命名变量
def match_named(value):match value:case (a, b):print(f"匹配到元组,第一个元素为 {a},第二个元素为 {b}")case {"name": name, "age": age}:print(f"匹配到字典,名字为 {name},年龄为 {age}")case _:print("匹配到其他值")match_named((1, 2)) # 输出:匹配到元组,第一个元素为 1,第二个元素为 2
match_named({"name": "Alice", "age": 30}) # 输出:匹配到字典,名字为 Alice,年龄为 30
match_named([1, 2, 3]) # 输出:匹配到其他值

复杂匹配
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.')# 11~18 years old.

模式匹配的优势
- 代码可读性:模式匹配使得代码更易于理解和维护。
- 减少嵌套:可以减少
if-elif-else语句的嵌套,使代码更简洁。 - 类型安全:通过类型匹配,可以确保变量的类型正确,减少类型错误。
总结
match 和 case 是 Python 3.10 中引入的新特性,它们提供了一种强大且灵活的方式来处理条件逻辑。通过学习这些特性,你可以编写更清晰、更高效的代码。希望本教程能帮助你更好地理解和使用这些新特性。如果你有任何问题或需要进一步的帮助,请随时联系我们。
相关文章:
Python 教程(七):match...case 模式匹配
目录 专栏列表前言基本语法match 语句case 语句 模式匹配的类型示例具体值匹配类型匹配序列匹配星号表达式命名变量复杂匹配 模式匹配的优势总结 专栏列表 Python教程(一):环境搭建及PyCharm安装Python 教程(二)&…...
Python小项目实战:杨辉三角
题目要求 编写python程序,实现输入正整数n,输出一个n层的杨辉三角,要求打印显示的时候左右对称 比如,输入7,返回结果如图所示 解决思路 generate_pascals_triangle(n) 函数: 生成一个包含 n 层的杨辉三角。 初始化第…...
java注解与反射(非常详细, 带有很多样例)
下面是详细地讲解 Java 中的注解与反射,并提供了很多的示例来帮助理解。 Java 注解(Annotations) 1. 注解的基本概念 注解(Annotation)是 Java 5 引入的一种用于为代码元素(类、方法、字段、参数等&…...
模拟实现短信登录功能 (session 和 Redis 两种代码实例) 带前端演示
目录 整体流程 发送验证码 短信验证码登录、注册 校验登录状态 基于 session 实现登录 实现发送短信验证码功能 1. 前端发送请求 2. 后端处理请求 3. 演示 实现登录功能 1. 前端发送请求 2. 后端处理请求 校验登录状态 1. 登录拦截器 2. 注册拦截器 3. 登录完整…...
C# Parallel设置最大并发度
背景 以前用Parallel都是直接用,今天在处理pdf时发现不是很快,特别是有时居然卡死了,异常是有处理的,但没有爆出来,不知道问题在哪。 老老实实不用多线程,一个多小时觉得还是太累。 用的话,部…...
【java】力扣 反转字符串中的单词
目录 题目描述题目描述思路代码 题目描述 151.反转字符串中的单词 题目描述 思路 主要是利用快慢指针和字符串的截取 还要了解去掉首尾空格的函数是trim 那s"the sky is blue"举例 这个例子是没有首尾空格的,以防万一,我们不管有没有&#…...
科学设计程序员面试内容,破解“八股文”之弊
“八股文”在实际工作中是助力、阻力还是空谈? 作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试考…...
蓝牙BlueZ验证使用记录
最近使用的一款AICSemi AIC8800D8芯片做的WiFiBT二合一模组,该模组WiFi使用SDIO通信,BT使用UART通信,供应商丢了一份驱动,包含了三个目录:aic8800_bsp、aic8800_fdrv和aic8800_btlpm,而蓝牙部分提供了lbh_s…...
【从0制作自己的ros导航小车:上位机篇】02、ros1多机通讯与坐标变换可视化
从0制作自己的ros导航小车 前言一、ros1多机通讯二、rviz可视化小车坐标系 前言 上节课完成了里程计数据与坐标变换发布,但是还没有测试,本节进行测试,测试之前需要知道一件事,上位机也就是开发板一般不做可视化用,因…...
JumpServer关闭admin mfa验证
背景 因为上一次启动了mfa验证,但是没有验证就关机重启,导致再开机输入密码后需要mfa绑定,但是怎么也无法绑定成功,导致无法登录。 故希望通过后台取消mfa的验证 解决方法 1. 进入docker docker exec -it jms_core /bin/bash…...
Kafka知识总结(选举机制+控制器+幂等性)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 选举机制 控制器(Broker)选举 控制器就是…...
2024非常全的接口测试面试题及参考答案-软件测试工程师没有碰到算我输!
一、前言 接口测试最近几年被炒的火热了,越来越多的测试同行意识到接口测试的重要性。接口测试为什么会如此重要呢? 主要是平常的功能点点点,大家水平都一样,是个人都能点,面试时候如果问你平常在公司怎么测试的&#…...
python 写一个年会抽奖的demo
使用while 进行循环,进行三轮之后,停止。random.sample() 抽样不重复查询数据 import random name_list [] for i in range(0,100): name_list .append(员工{i}) winnerNum [30,6,3] //每个中奖人数 count 0 while count < 3: choice i…...
C++ OpenCV 实现多张图片叠加 叠加文字
C OpenCV 实现多张图片叠加 叠加文字 在C中使用OpenCV叠加多张图片以及添加文字的基本步骤如下: 加载多张图片。 确定叠加位置。 使用cv::addWeighted叠加图片,可以为叠加的图片添加透明度。 使用cv::putText在图片上添加文字。 显示或保存结果图片…...
用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined
用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined,客户端运行是通过的但命令行运行会报错 修改端口也是一样报错,地址修改为127.0.0.1会报错connect ECONNREFUSED 127.0.0.1:8080 解决方法:不用localhost&…...
PyQt6简易案例代码GUI界面小工具——实现增、删、查、改(练手正合适)
目录 专栏导读1、库的介绍PyQt6的主要特点包括:使用PyQt6开发应用程序的一般步骤:库的安装 2、设计窗口设计列表视图设计输入框控件与按钮设计布局listView的简单样式增删查改函数 完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—P…...
JavaScript快速入门指南
JavaScript是一种广泛应用于网页开发的脚本语言,它可以让网页实现动态效果和交互性。无论是前端开发还是全栈开发,JavaScript都是不可或缺的一部分。本文将带你快速入门JavaScript,从基础语法到实际应用,让你快速上手这门强大的语…...
Esbuild介绍
Esbuild是一个由Evan Wallace基于Go语言开发的快速、可扩展的JavaScript和CSS打包器及压缩器。它以其极快的构建速度和高效的性能在众多构建工具中脱颖而出。 一、核心特性 超快的构建速度: Esbuild相比传统的构建工具(如Webpack)在构建速度…...
UnityShaderUI编辑器扩展
前言: 当我们在制作通用Shader的时候,避免不了许多参数混杂在一起,尽管在材质面板已经使用过Header标签来区分,但是较长的Shader参数就会导致冗余,功能块不够简约明了,如图: 对于Shader制作者来…...
分布式事务——2PC 代码示例
一 2PC代码示例 在Java中实现两阶段提交(2PC, Two-Phase Commit)协议通常涉及多个组件,包括事务协调者(Transaction Coordinator)和多个资源管理器(Resource Managers,如数据库)。在…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
