当前位置: 首页 > news >正文

笔记8——模式匹配 match语句(仅在Python 3.10及以上版本中可用)

文章目录

  • 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用)
    • 基本语法
    • 基本匹配操作
    • 应用场景

模式匹配 match语句(仅在 Python 3.10及以上版本 中可用)

  • Python 3.10 及以上版本中才引入了 match 语句
  • 用于简化复杂的条件判断和数据解构;类似于其他语言中的 switch-case 语句,但功能更强大,支持 结构化模式匹配 (Structural Pattern Matching)

基本语法

# match subject:
#     case pattern1:
#         #当 subject 匹配 pattern1 时执行的代码
#     case pattern2:
#         #当 subject 匹配 pattern2 时执行的代码
#     ...
#     case _:
#         # 当 subject 不匹配时任何前面的模式时执行的代码

基本匹配操作

  • 匹配常量
    可以匹配 单个值
x = 902match x:case 902:print('Happy birthday!')case _:print('this is not my birthday')

在这里插入图片描述
也可以匹配 多个值 ,多个值之间用 | 分隔:

x = -2match x:case 0:print('x等于0')case 1|2|3|4:print('x为正数')case -1|-2|-3|-4:print('x为负数')case _:print('shayebushi')

在这里插入图片描述

  • 匹配变量
point = (0,0)
# point = (1,-1)match point:case (x,y):print(f'Coordinates are ({x},{y})')
#如果 point 是一个包含两个元素的元组,会将元组的值分别赋给 x 和 y 变量上并打印坐标

在这里插入图片描述

  • 匹配元组
# tuple = () # 输出: 空元组
tuple = (1,) # 输出: 单元素元组,元素为 1
# tuple = (1, 2) # 输出: 双元素元组,元素为 1,2
# tuple = (1, 2, 3, 4, 5) # 输出: 多个元素元组,前两个为 1 和 2,剩余 (3, 4,5)match tuple:case ():print("空元组")case (x,):print(f"单元素元组,元素为 {x}")case (x, y):print(f"双元素元组,元素为 {x}{y}")case (x, y, *rest):print(f"多个元素元组,前两个为 {x}{y},剩余 {rest}")

在这里插入图片描述

  • 匹配列表
    假设用户输入一个命令,用 args = [‘gcc’,‘hello.c’] 存储,用 match 匹配来解析这个列表
args = ['gcc','hello.c','world.c']
# args = ['clean']
# args = ['gcc']
match args:# 如果列表中仅有 'gcc' 字符串,没有指定文件名,报错:case ['gcc']:print('gcc: missing source file(s).')# 出现gcc,且至少指定了一个文件:# 列表第一个字符串是 'gcc',第二个字符串赋给变量 files,后面的所有任意个字符串绑定到 *files(表明至少指定一个文件)case ['gcc',file1,*files]:print('gcc compile:' + file1 + ',' + ','.join(files))# 列表仅有 'clean'一个字符串:case ['clean']:print('clean')# 其他所有情况case _:print('invalid command.')

在这里插入图片描述

  • 匹配字典
d = {'name':'echo','age':'24'}match d:case {"name": name, "age": age}:print(f"用户 {name},年龄 {age}")case {"error": code}:print(f"错误码: {code}")case _:print("未知格式")

在这里插入图片描述

  • 条件匹配
    可以在 case 语句中使用 if 来添加额外的条件(守卫条件),只有当模式匹配且守卫条件为 True 时,才会执行相应的代码块
# value = 0
value = 10
# value = -10match value:case x if x < 0:print("负数")case x if x == 0:print("零")case x if x > 0:print("正数")

在这里插入图片描述

应用场景

  • 处理复杂的条件分支:多个复杂的条件需要判断时
  • 解析数据结构:解析JSON数据、处理复杂的配置文件
  • 状态机实现:根据不同状态和事件进行状态转换的判断

相关文章:

笔记8——模式匹配 match语句(仅在Python 3.10及以上版本中可用)

文章目录 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用)基本语法基本匹配操作应用场景 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用) Python 3.10 及以上版本中才引入了 match 语句用于简化复杂的条件判断和数据解构&#xff1b;类似于其他语言中的 swit…...

maven-antrun-plugin插件的用法

maven-antrun-plugin 是 Maven 中一个非常强大的插件&#xff0c;它允许你在 Maven 构建过程中运行 Apache Ant 任务。通过这个插件&#xff0c;你可以在 Maven 构建的各个阶段&#xff08;如 compile、package 等&#xff09;中执行自定义的 Ant 任务&#xff0c;比如复制文件…...

iOS主要知识点梳理回顾-4-运行时类和实例的操作

类和实例的操作 iOS 运行时&#xff08;Objective-C Runtime&#xff09;提供了丰富的 API 来对类进行动态操作&#xff0c;包括创建类、修改类的结构、添加方法、替换方法等。这对于实现动态特性、AOP&#xff08;面向切面编程&#xff09;、方法拦截等功能非常重要。以下举例…...

vue2和vue3生命周期的区别通俗易懂

用最直白的对比帮你理解 Vue2 和 Vue3 生命周期的区别&#xff0c;就像对比手机系统的升级&#xff1a; 一、生命周期阶段对比表&#xff08;老手机 vs 新手机&#xff09; 阶段Vue2&#xff08;老系统&#xff09;Vue3&#xff08;新系统&#xff09;变化说明初始化beforeCre…...

使用 meshgrid函数绘制网格点坐标的原理与代码实现

使用 meshgrid 绘制网格点坐标的原理与代码实现 在 MATLAB 中&#xff0c;meshgrid 是一个常用函数&#xff0c;用于生成二维平面网格点的坐标矩阵。本文将详细介绍如何利用 meshgrid 函数生成的矩阵绘制网格点的坐标&#xff0c;并给出具体的代码实现和原理解析。 实现思路 …...

postgresql源码学习(59)—— 磁盘管理器 SMGR

一、 定义及作用 PostgreSQL 的磁盘管理器&#xff08;Storage Manager&#xff0c;简称 SMGR&#xff09;是数据库系统中负责管理底层存储的核心模块。磁盘管理器并非直接操作磁盘上的文件&#xff0c;而是通过VFD&#xff08;虚拟文件描述符&#xff0c;将在后续学习&#xf…...

Spring Boot(8)深入理解 @Autowired 注解:使用场景与实战示例

搞个引言 在 Spring 框架的开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是它的一个核心特性&#xff0c;它能够让代码更加模块化、可测试&#xff0c;并且易于维护。而 Autowired 注解作为 Spring 实现依赖注入的关键工具&…...

UE_C++ —— Structs

目录 一&#xff0c;实现一个UStruct 二&#xff0c;Struct Specifiers 三&#xff0c;最佳做法与技巧 结构体&#xff08;Struct&#xff09;是一种帮助组织和操作相关属性的数据结构&#xff1b;在引擎中&#xff0c;结构体会被引擎反射系统识别为 UStruct&#xff0c;但不…...

ArcGISPro 新建shp+数据结构

import arcpy# 设置工作空间和 Shapefile 存放路径 shp_path r"C:\path\to\your\folder\PolygonZY.shp" # Shapefile 存放路径 fields [("CHBH", "TEXT", 20),("ZCMC", "TEXT", 100),("ZCLX", "TEXT"…...

DeepSeek教unity------MessagePack-06

无类型 Typeless 无类型的 API 类似于 BinaryFormatter&#xff0c;因为它会将类型信息嵌入到数据块中&#xff0c;所以在调用 API 时不需要显式指定类型。 MessagePackSerializer.Typeless 是 Serialize/Deserialize<object>(TypelessContractlessStandardResolver.In…...

2.【BUUCTF】bestphp‘s revenge

进入题目页面如下 进行代码审计 <?php // 1. 高亮显示当前PHP文件的源代码&#xff0c;方便开发者查看代码内容&#xff0c;在生产环境中不应使用此函数&#xff0c;可能会导致代码泄露。 highlight_file(__FILE__);// 2. 定义变量 $b &#xff0c;其值为字符串 implode &…...

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-23- 操作鼠标拖拽 - 番外篇(详细教程)

拉票 亲爱的小伙伴们或者童鞋们&#xff0c;喜欢宏哥文章的&#xff0c;请动动你们发财小手&#xff0c;给我投投票票 。 祝2025小伙伴们工作顺利&#xff0c;家庭和睦&#xff0c;心想事成&#xff0c;财源滚滚&#xff01; 我的票还有7票&#xff0c;互票的朋友私信给我。 投…...

Netty源码解析之异步处理(二):盛赞Promise中的集合设计

前言 在阅读Netty源码的过程中&#xff0c;我越来越相信一句话&#xff1a;“Netty的源码非常好&#xff0c;质量极高&#xff0c;是Java中质量最高的开源项目之一”。如果认真研究&#xff0c;会有一种遍地黄金的感觉。 本篇文件我将记录一下鄙人在Promise的实现类DefaultPr…...

NetworkX布局算法:nx.spring_layout

诸神缄默不语-个人CSDN博文目录 官方文档&#xff1a;https://networkx.org/documentation/stable/reference/generated/networkx.drawing.layout.spring_layout.html 和nx.fruchterman_reingold_layout()等价。 这个函数主要是为了在可视化NetworkX图时设置节点分布布局的&…...

Navicat导入海量Excel数据到数据库(简易介绍)

目录 前言正文 前言 此处主要作为科普帖进行记录 原先Java处理海量数据的导入时&#xff0c;由于接口超时&#xff0c;数据处理不过来&#xff0c;后续转为Navicat Navicat 是一款功能强大的数据库管理工具&#xff0c;支持多种数据库系统&#xff08;如 MySQL、PostgreSQL、…...

LeetCodehot100 力扣热题100 二叉树展开为链表

代码思路 目标&#xff1a; 将二叉树展平&#xff08;flatten&#xff09;为一个单链表。展平后的链表应该按照前序遍历的顺序排列节点&#xff0c;即&#xff1a; • 节点的左子树指针设置为 nullptr。 • 节点的右子树指针指向下一个节点。 代码注释及思路 class Solution…...

2.14学习总结

#include <stdio.h> #include <stdlib.h> #include <math.h>#define MAX_N 32767// 二分查找最接近目标值的元素 int binarySearch(int* arr, int left, int right, int target) {while (left < right) {int mid left (right - left) / 2;if (arr[mid] …...

在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程

既然我们已经在本地部署了DeepSeek,肯定希望能够利用本地的模型对自己软件开发、办公文档进行优化使用,接下来就先在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档的教程奉上。 前提: (1)已经部署好了DeepSeek,可以看我的文章:个人windows电脑上安装DeepSe…...

zola + github page,用 workflows 部署

之前的Zola都是本地build之后&#xff0c;再push到github上&#xff0c;这种方式很明显的弊端就是只能在本地编辑&#xff0c;而不能通过github编辑&#xff0c;再pull到本地&#xff0c;缺乏了灵活性。因此将zola用workflows来部署。 repo地址&#xff1a;https://github.com/…...

【科技革命】颠覆性力量与社会伦理的再平衡

目录 2025年科技革命&#xff1a;颠覆性力量与社会伦理的再平衡目录技术突破全景图认知智能的范式转移量子霸权实现路径生物编程技术革命能源结构重构工程 产业生态链重构医疗健康新范式教育系统智能进化金融基础设施变革制造范式革命 科技伦理与文明演进 2025年科技革命&#…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...