Python学习之Python3.10中match-case的用法和示例

news2024/11/19 15:32:31

在 Python 3.10 中引入了新的 match-case 语法,它是一种用于模式匹配的结构。它类似于 switch-case 语句,可以根据不同的模式匹配执行不同的代码块。
在这里插入图片描述

match-case 语法的基本结构如下:

match expression:
    case pattern1:
        # 执行代码块1
    case pattern2:
        # 执行代码块2
    ...
    case patternN:
        # 执行代码块N
    case _:
        # 默认代码块

其中 expression 是要匹配的表达式,pattern 是用于匹配的模式,通过 case 关键字连接。下面是几种常见的 match-case 用法及示例:

1. 常量匹配:
match x:
    case 0:
        print("值为0")
    case 1:
        print("值为1")
    case _:
        print("其他值")
2. 变量匹配:
match x:
    case 'a':
        print("变量为'a'")
    case n:
        print(f"变量为{n}")
    case _:
        print("其他情况")
3. 类型匹配:
match value:
    case str_val as str:
        print("字符串类型")
    case int_val as int:
        print("整数类型")
    case _:
        print("其他类型")
4. 结构化匹配:
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
match p:
    case Point(0, 0):
        print("原点")
    case Point(x, 0):
        print(f"在 x 轴上,x 坐标为{x}")
    case Point(0, y):
        print(f"在 y 轴上,y 坐标为{y}")
    case Point(x, y):
        print(f"在坐标系中,坐标为({x}, {y})")

需要注意的是,在 match-case 结构中,模式是按从上到下的顺序进行匹配的,一旦匹配成功,相应的代码块会被执行,之后的模式不再匹配。如果没有匹配成功的模式,可以使用 _ 作为默认模式。

Python 3.10 中的 match-case 语法还支持区间匹配,可以用于判断一个值是否在某个区间内。

5.区间匹配的示例:
match value:
    case 0..10:
        print("值在 0 到 10 之间")
    case 11..20:
        print("值在 11 到 20 之间")
    case _:
        print("值在其他区间")

在示例中,case 后面的模式使用了区间表示。0..10 表示闭区间,包括 0 和 10;11..20 同样是闭区间,包括 11 和 20。如果匹配成功,相应的代码块将被执行。

需要注意的是,在区间匹配中,左边界必须小于或等于右边界。如果不满足这个条件,将会引发 SyntaxError 错误。

此外,区间匹配也可以与其他类型的匹配结合使用。例如:

match value:
    case str_val as str:
        print("字符串类型")
    case int_val as int:
        case 0..10:
            print("整数在 0 到 10 之间")
        case 11..20:
            print("整数在 11 到 20 之间")
        case _:
            print("其他整数")
    case _:
        print("其他类型")

在这个示例中,首先匹配原始值的类型,然后再根据整数值的区间进行匹配。

这是区间匹配在 Python 3.10 的 match-case 中的用法和示例。通过使用区间匹配,我们可以更加灵活地匹配值是否在指定的区间内,从而简化条件判断的过程。

这就是 match-case 在 Python 3.10 中的基本用法和示例。它可以简化复杂的条件判断,使代码更加清晰和易读。

延伸阅读

match-case 结构与传统的 switch-case 语句有几个主要的不同之处:

  1. 模式匹配:match-case 结构支持更灵活的模式匹配,可以匹配常量、变量、类型、结构化数据以及区间。这使得在匹配逻辑更加清晰,并且可以消除大量的连续的 if-elif 语句。

  2. 穿透:在 switch-case 语句中,一旦匹配到某个 case,默认会从匹配的 case 开始执行代码块,并且在每个 case 结束后终止整个 switch 结构。而在 match-case 结构中,默认是不会穿透的,也就是说只会执行匹配成功的 case 对应的代码块,并在执行完后立即退出 match-case 结构,不会执行其他 case 对应的代码块。

  3. 缺省情况:在 match-case 结构中可以使用 _ 作为默认模式,用于处理无法匹配到其他模式的情况。而在 switch-case 结构中,如果没有匹配到任何 case,需要自己另外处理这种情况。

  4. 可迭代对象:在 match-case 结构中,可以使用 match 对可迭代对象进行解构匹配,匹配其中的每个元素。而在 switch-case 结构中,需要手动遍历可迭代对象进行匹配。

总体来说,match-case 结构相对于传统的 switch-case 语句更灵活、更强大,可以更方便地进行模式匹配。它能够简化代码逻辑,使代码更易读、更易扩展。但需要注意的是,match-case 结构是在 Python 3.10 中引入的新特性,如果使用的是较早版本的 Python,需要进行相应的版本兼容性检查和处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1109556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud-Seata

一、介绍 (1)实现分布式事务 (2)解决Spring只支持单机事务 (3)事务ID TC(事务协调者) TM(事务管理者) RM(资源管理者)

2021-arxiv-Prefix-Tuning- Optimizing Continuous Prompts for Generation

2021-arxiv-Prefix-Tuning- Optimizing Continuous Prompts for Generation Paper:https://arxiv.org/pdf/2101.00190.pdf Code:https://github.com/XiangLi1999/PrefixTuning 前缀调优:优化生成的连续提示 prefix-tunning 的基本思想也是想…

西湖大学利用 Transformer 分析百亿多肽的自组装特性,破解自组装法则

多肽是两个以上氨基酸通过肽键组成的生物活性物质,可以通过折叠、螺旋形成更高级的蛋白质结构。多肽不仅与多个生理活动相关联,还可以自组装成纳米粒子,参与到生物检测、药物递送、组织工程中。 然而,多肽的序列组成过于多样&…

瞬态抑制二极管TVS的工作原理?|深圳比创达电子EMC(上)

TVS二极管具有响应速度快、漏电流小、钳位电压稳以及无寿命衰减的特性,从小到信号线静电防护,大到电力系统抗雷击浪涌,TVS都发挥着至关重要的作用。本章对瞬态抑制二极管TVS工作机理展开分析,供产品选型参考。接下来就跟着深圳比创…

用git stash暂存修改

git stash命令用于保存当前工作目录的临时状态,包括暂存区和已修改但未暂存的文件。它会将这些修改保存在一个临时区域(即“堆栈”)中,让你能够回到一个干净的工作目录,可以进行其他操作。等到你完成其他任务后&#x…

立即报名 | 云原生 + AI Meetup 成都站 11.4 正式开启

2023 年,KubeSphere 社区已经在深圳、杭州、上海三个城市各组织了一场线下 Meetup。第四站,我们将走进天府成都。 11 月 4 日,云原生 AI Meetup 成都站将正式开启! 此次 Meetup,我们邀请到了蚂蚁集团、云猿生数据、…

系列十二、Redis的主从复制

一、概述 主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据。 二、架构图 三、搭建主从复制 # 1、准备3台机器并修改配置 -- master port 7379-- slave1 port 7380 slaveof masterip masterport-- slave2 port 7381 slaveof masterip masterpor…

美创科技入选“内蒙古自治区第一届网络安全应急技术支撑单位”

近日,内蒙古自治区党委网信办、国家网络应急技术处理协调中心内蒙古分中心评选“内蒙古自治区网络安全应急技术支撑单位”结果公布。 经自治区各地区、各部门和单位推荐各单位自主申报,资料审查和专家评审等环节,美创科技成功入选“内蒙古自治…

win10下yolov7 tensorrt模型部署

TensorRT系列之 Win10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署…

【数据结构】排序--归并排序

目录 一 基本思想 二 代码实现 三 非递归归并排序 一 基本思想 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并&#xff…

linux常见命令-文件目录类

9.4 文件目录类 (1)pwd 指令:显示当前工作目录的绝对路径 (2)Is指令:查看当前目录的所有内容信息 基本语法: ls [选项,可选多个] [目录或是文件] 常用选项:-a:显示当前目录所有的文件和目录,包括隐藏的…

02Nacos和Feign及Gateway配置

一、Nacos配置管理 1.统一配置管理 配置更改热更新 ①在Nacos中添加配置信息: ②在弹出表单中填写配置信息: 2.配置获取的步骤如下 配置文件bootstrap.yml的优先级比application.yml优先级高。把nacos地址放入bootstrap.yml。 ①在userservice中引入N…

Python —— Reference | hou

Houdini有非常多的Python模块可使用,不止一个hou,如hutil、toolutils、husd、kramautils等,只是帮助文档并没有提起,可从源代码docstring中查询; //查询有效的模块 help(modules) hou模块按功能可分为三类:…

windows 10下安装Pytorch的操作文档与避坑指南

前言 PyTorch3D 是 Facebook AI Research (FAIR) 开发的一个用于 3D 计算机视觉任务的开源深度学习库。它是建立在 PyTorch 框架之上的,并旨在为研究人员和工程师提供处理 3D 数据、渲染和几何计算的工具和模块。 PyTorch3D的用途: 3D 几何操作&#x…

Linux 内核启动分析

Linux 内核启动分析-BugMan-ChinaUnix博客 通过《Linux应用程序elf描述》,我们了解到一个应用程序编译后,最终会按照指定方式进行链接,而我们通过ld --verbose可以查看对应应用的默认链接方式。那么对于Linux内核呢?毫无疑问&…

大模型背景下软件工程的机遇与挑战

点击链接了解详情 本文作者:汪晟杰 导语:AISE(AI Software Engineering)有人说是软件工程 3.0,即基于大模型(LLM - Large Language Model)时代下的软件工程。那么究竟什么是 AISE,他的发展历程对…

Java学习入门偏(2)

⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 Hello,亲爱的各位友友们,好久不见&#xff0…

官媒代运营:内容营销是什么?为什么要做内容营销?

在当今数字化时代,信息传播的速度和途径前所未有地广泛,企业们正在寻找新的方法来吸引潜在客户并保持现有客户的忠诚度。在这个背景下,内容营销崭露头角,成为了企业推广和营销的一项重要策略。 今天媒介易来跟大家分享干货知识&am…

Mini小主机All-in-one搭建教程6-安装苹果MacOS系统

笔者使用的ESXI7.0 Update 3 抱着试试的态度想安装一下苹果的MacOS系统 主要步骤有2个 1.解锁unlocker虚拟机系统 2.安装苹果MacOS系统 需要下载的文件 unlocker 这一步是最耗时间的,要找到匹配自己系统的unlocker文件。 https://github.com/THDCOM/ESXiUnloc…

VMware vCenter Server 6.7安装过程记录

0、前言 最近由于一些原因需要安装测试VMware ESXi,无奈所有服务器都是十几年前的,配置低也不支持。后来通过VMware兼容性列表查询,快要放弃的时候发现唯一一台Dell R420,如获至宝。通过查询得知最高支持到6.5 U3,好在…