当前位置: 首页 > 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年科技革命&#…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...