python match case语法

学习路线:B站

普通的if判断

def if_traffic_light(color):if color == 'red':return 'Stop'elif color == 'yellow':return 'Slow down'elif color == 'green':return 'Go'else:return 'Invalid color'print(if_traffic_light('red'))  # Output: Stop
print(if_traffic_light('yellow')) # Output: Slow down
print(if_traffic_light('green')) # Output: Go
print(if_traffic_light('blue')) # Output: Invalid color

使用match-case方式,同样达到效果:

def match_case_1(color):match color:case 'red':return 'Stop'case 'green':return 'Go'case 'yellow':return 'Caution'case _:return 'Invalid color'
print(match_case_1('red'))
print(match_case_1('green'))
print(match_case_1('yellow'))

match-case 解包

普通的if语句:

def if_point(point: tuple):if len(point) == 2:if point[0] == 0 and point[1] == 0:print("origin")else:print(f"x={point[0]}, y={point[1]}")else:print("invalid point")

使用match-case改进:

# 使用match-case 解包
def match_case_1(point: tuple):"""使用match-case解包, 解包后可以使用变量名来访问元组中的元素,可以使用通配符_来匹配任意值"""match point:case (0, 0):print(f"Origin")case (x, y):print(f"x={x}, y={y}")case other: # 也可以用下划线代替print(f"{other}Unknown point")match_case_1((1, 2))  # x=1, y=2
match_case_1((0, 0))  # Origin
match_case_1((1,))  # (1,)Unknown point
match_case_1((1, 2, 3))  # (1, 2, 3)Unknown point

match-case 解包升级

# 使用match-case 解包
def match_case_1(point: tuple):"""使用match-case解包, 解包后可以使用变量名来访问元组中的元素,可以使用通配符_来匹配任意值"""match point:case (0, 0):print(f"Origin")case (x, 0):print(f"on x-axis  x={x}, y=0")case (0, y):print(f"on y-axis x=0, y={y}")case (x, y):print(f"x={x}, y={y}")case other:print(f"{other}Unknown point")match_case_1((0, 1))  # on y-axis x=0, y=1
match_case_1((2,0))  # on x-axis  x=2, y=0
match_case_1((1, 2, 3))  # (1, 2, 3)Unknown point 

match-case 解包支持逻辑判断

# 使用match-case 解包
def match_case_1(point: tuple):"""使用match-case解包, 解包后可以使用变量名来访问元组中的元素,可以使用通配符_来匹配任意值"""match point:case (0, 0):print(f"Origin")case (x, 0) | (0, x): # 这里是或逻辑print(f"on axis")case (x, y):print(f"x={x}, y={y}")case other:print(f"{other}Unknown point")match_case_1((0, 1))  # on y-axis x=0, y=1
match_case_1((2,0))  # on x-axis  x=2, y=0
match_case_1((1, 2, 3))  # (1, 2, 3)Unknown point

match case 不会区分序列的类型,tuple与list是一样的

my_tuple = (1, 2)
my_list = [1, 2]
my_tuple = (1, 2)
my_list = [1, 2]match my_tuple:case 1, 2: # 可以匹配上print("Tuple matches (1, 2)")match my_list:case 1, 2: # 可以匹配上print("List matches [1, 2]")match my_tuple:case (1, 2): # 可以匹配上print("Tuple matches (1, 2)")match my_list:case [1, 2]: # 同样可以匹配print("List matches [1, 2]")

如果需要区分类型,则可以修改:

my_tuple = (1, 2)
my_list = [1, 2]match my_list:case tuple((1, 2)): # 无法匹配print("Tuple matches (1, 2)")match my_tuple:case tuple((1, 2)): # 可以匹配print("Tuple matches (1, 2)")

进一步的,match case 也可以匹配类型,而不必关心具体内容:

my_tuple = (1, 2)
my_list = [1, 2]match my_tuple:case tuple():print("Tuple match")case list():print("List match")

match case 支持条件判断

def match_quadrant(point):match point:case (x, y) if x > 0 and y > 0:return "First quadrant"case (x, y) if x < 0 and y > 0:return "Second quadrant"case (x, y) if x < 0 and y < 0:return "Third quadrant"case (x, y) if x > 0 and y < 0:return "Fourth quadrant"case (0, _) | (_, 0):return "On the axis"case _:return "Invalid point"point1 = (5, 3)
point2 = (-2, 7)
print(match_quadrant(point1))
print(match_quadrant(point2))

match case 字典匹配

dict_p = {'x': 1, 'y': 2}match dict_p:case {'x': 0, 'y': 0}:print('origin')case {'x': x, 'y': y}:print(f'x={x}, y={y}')

也可以部分匹配:

dict_p = {'x': 1, 'y': 2}match dict_p:case {'x': 0, 'y': 0}:print('origin')case {'x':1 }:print(f'x={x}, y={y}')

match case 匹配自定义类

class Point:def __init__(self, x, y):self.x = xself.y = yp = Point(1, 2)
match p:# 这里的case匹配的是p的类型和值,值必须是关键字参数# 否则报错:TypeError: Point() accepts 0 positional sub-patterns (2 given)case Point(x=1, y=2):print("Point is (1, 2)")case Point(x=3, y=4):print("Point is (3, 4)")case _:print("Point is not (1, 2) or (3, 4)")

如果想要在case中使用位置参数,需要添加类变量__match_args__ = ("x", "y")

class Point:# 指定macth case中的位置参数__match_args__ = ("x", "y")def __init__(self, x, y):self.x = xself.y = yp = Point(1, 2)
match p:# 这里的case匹配的是p的类型和值,值必须是关键字参数case Point(x, y):print("Point is (1, 2)")case Point(x=3, y=4):print("Point is (3, 4)")case _:print("Point is not (1, 2) or (3, 4)")

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

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

相关文章

LLaMA-Factory大模型微调全流程指南

该文档为LLaMA-Factory大模型微调提供了完整的技术指导&#xff0c;涵盖了从环境搭建到模型训练、推理和合并模型的全流程&#xff0c;适用于需要进行大模型预训练和微调的技术人员。 一、docker 容器服务 请参考如下资料制作 docker 容器服务&#xff0c;其中&#xff0c;挂…

【HCIA】静态综合实验练习笔记

实验拓扑图如下&#xff1a; 实验配置思路如下&#xff1a; 1、网段划分、配置IP地址 2、配置DHCP&#xff0c;使客户端获得ip地址 3、配置静态明细路由&#xff0c;内网全网通 4、配置空接口防环 5、配置优先级&#xff0c;实现选路最佳 6、配置缺省路由&#xff0c;实现公网通…

大数据(4.5)Hive聚合函数深度解析:从基础统计到多维聚合的12个生产级技巧

目录 背景一、Hive聚合函数分类与语法1. 基础聚合函数2. 高级聚合函数 二、6大核心场景与案例场景1&#xff1a;基础统计&#xff08;SUM/COUNT&#xff09;场景2&#xff1a;多维聚合&#xff08;GROUPING SETS&#xff09;场景3&#xff1a;层次化聚合&#xff08;ROLLUP&…

RTOS基础 -- NXP M4小核的RPMsg-lite与端点机制回顾

一、RPMsg-lite与端点机制回顾 在RPMsg协议框架中&#xff1a; Endpoint&#xff08;端点&#xff09; 是一个逻辑通信端口&#xff0c;由本地地址&#xff08;local addr&#xff09;、远程地址&#xff08;remote addr&#xff09;和回调函数组成。每个消息都会发送到特定的…

NineData云原生智能数据管理平台新功能发布|2025年3月版

本月发布 15 项更新&#xff0c;其中重点发布 3 项、功能优化 11 项、性能优化 1 项。 重点发布 基础服务 - MFA 多因子认证 新增 MFA 多因子认证&#xff0c;提升账号安全性。系统管理员开启后&#xff0c;所有组织成员需绑定认证器&#xff0c;登录时需输入动态验证码。 数…

DAY 35 leetcode 202--哈希表.快乐数

题号202 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&a…

Maven+Spring实现后端开发

一、前置知识的介绍 1.Spring 轻量级的 DI / IoC 和 AOP 容器的开源框架 容器的开源框架网址&#xff1a;https://spring.io/projects/spring-framework 作用&#xff1a;可简化管理创建和组装对象之间的依赖关系 将controller----->service------->dao层的依赖配置…

解锁界面设计密码,打造极致用户体验

界面设计是对软件、网站、移动应用等产品的用户界面进行设计的过程&#xff0c;旨在为用户提供美观、易用、高效的交互体验。以下是关于界面设计的一些主要方面&#xff1a; 一、设计原则 用户中心原则&#xff1a;以用户为中心&#xff0c;了解用户的需求、期望、行为和习惯…

Joint Receiver Design for Integrated Sensing and Communications

摘要——在本文中&#xff0c;我们研究了集成感知与通信(ISAC)系统的联合接收机设计&#xff0c;其中通信信号和目标回波信号同时被接收和处理&#xff0c;以在两种功能之间实现平衡性能。特别地&#xff0c;我们提出了两种设计方案来解决联合感知和通信问题中的接收信号处理。…

DeepSeek接入飞书多维表格,效率起飞!

今天教大家把DeepSeek接入飞书表格使用。 准备工作&#xff1a;安装并登录飞书&#xff1b;可以准备一些要处理的数据&#xff0c;确保数据格式正确&#xff0c;如 Excel、CSV 等&#xff0c;也可直接存储到飞书多维表格。 创建飞书多维表格&#xff1a;打开飞书&#xff0c;点…

【C语言入门】由浅入深学习指针 【第二期】

目录 1. 指针变量为什么要有类型&#xff1f; 2. 野指针 2.1 未初始化导致的野指针 2.2 指针越界导致的野指针 2.3 如何规避野指针 3. 指针运算 3.1 指针加减整数 3.2 指针减指针 3.3 指针的关系运算 4. 二级指针 5. 指针数组 5.1 如何使用指针数组模拟二维数组 上…

OpenCV 图形API(13)用于执行两个矩阵(或图像)逐元素乘法操作的函数mul()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 计算两个矩阵的每个元素的缩放乘积。 mul函数计算两个矩阵的逐元素乘积&#xff1a; dst ( I ) saturate ( scale ⋅ src1 ( I ) ⋅ src2 ( I ) ) …

人工智能混合编程实践:C++调用封装好的DLL进行图像超分重建

人工智能混合编程实践:C++调用封装好的DLL进行图像超分重建 前言相关介绍C++简介ONNX简介ONNX Runtime 简介**核心特点**DLL 简介**核心特点****创建与使用****应用场景****优点与挑战**图像异常检测简介应用场景前提条件实验环境项目结构C++调用封装好的DLL进行图像超分重建C…

Linux内核之高效缓冲队列kfifo

一、先说FIFO 队列是常见的一种数据结构&#xff0c;简单看来就是一段数据缓存区&#xff0c;可以存储一定量的数据&#xff0c;先存进来的数据会被先取出&#xff0c;First In Fist Out&#xff0c;就是FIFO。 FIFO主要用于缓冲速度不匹配的通信。 例如生产者&#xff08;数…

【面试篇】Kafka

一、基础概念类 问题&#xff1a;请简述 Kafka 是什么&#xff0c;以及它的主要应用场景有哪些&#xff1f; 答案&#xff1a;Kafka 是一个分布式流处理平台&#xff0c;它以高吞吐量、可持久化、可水平扩展等特性而闻名。其主要应用场景包括&#xff1a; 日志收集&#xff1a…

解释回溯算法,如何应用回溯算法解决组合优化问题?

一、回溯算法核心原理 回溯算法本质是暴力穷举的优化版本&#xff0c;采用"试错剪枝"策略解决问题。其核心流程如下&#xff1a; ​路径构建&#xff1a;记录当前选择路径​选择列表&#xff1a;确定可用候选元素​终止条件&#xff1a;确定递归结束时机​剪枝优化…

Vue 学习随笔系列二十二 —— 表格高度自适应

表格高度自适应 文章目录 表格高度自适应1、方法一2、方法二 1、方法一 根据页面元素计算各自占比 <template><div class"main"><div class"query-form" ref"Query"><QueryFormref"QueryForm"query"query&q…

ubuntu22.04.5安装docker,解决安装出现的错误,解决Docker hello-world没打印出来

文章目录 前言一 安装失败解决1结合具体报错分析2 首先怀疑是VPN的问题3 直接百度报错信息4最终解决问题 二 验证Docker hello-world没打印出来总结 前言 先说一下前面的情况&#xff0c;使用的是公司的工作站&#xff0c;登录公司一个帐号使用的公司网络&#xff0c;使用网上…

idea插件(自用)

.ignore git排除文件插件&#xff1a;.ignore介绍 Grep console 自定义日志颜色&#xff1a;Grep console介绍 AceJump 光标快速定位&#xff1a;AceJump介绍 Key promoter 提示插件:Key promoter介绍 MetricsReloaded 分析代码复杂度的插件&#xff1a;MetricsReload…