0

0

Pythonmatch函数的类模式匹配_类模式match函数Python详解

爱谁谁

爱谁谁

发布时间:2025-09-21 11:45:01

|

888人浏览过

|

来源于php中文网

原创

match-case语句是Python 3.10引入的结构化模式匹配语法,用于替代复杂if-elif-else链,支持类型、属性和结构匹配。

pythonmatch函数的类模式匹配_类模式match函数python详解

Python 中的 match 函数类模式匹配(class pattern matching) 是从 Python 3.10 版本开始引入的重要特性,属于结构化模式匹配(structural pattern matching)的一部分。它通过

match-case
语句实现,功能类似于传统的
switch-case
,但更强大,尤其支持对对象类型、属性和结构的匹配。

什么是 match-case 语句?

match-case
是 Python 3.10 引入的新语法,用于替代复杂的
if-elif-else
判断链。它的基本结构如下:

match subject:
    case pattern1:
        # 执行代码
    case pattern2:
        # 执行代码
    case _:
        # 默认情况

其中

subject
是要匹配的对象,
pattern
是定义匹配规则的模式。当某个模式匹配成功时,执行对应分支。

类模式匹配:匹配实例对象

类模式允许你根据对象的类型及其属性进行匹配。这在处理多种数据类型或自定义类实例时非常有用。

立即学习Python免费学习笔记(深入)”;

假设我们有如下类定义:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

class Circle: def init(self, radius): self.radius = radius

我们可以使用类模式来判断传入对象的类型并提取其属性:

网奇Eshop网络商城系统
网奇Eshop网络商城系统

网奇.NET网络商城系统是基于.Net平台开发的免费商城系统。功能强大,操作方便,设置简便。无需任何设置,上传到支持asp.net的主机空间即可使用。系统特色功能:1、同时支持Access和SqlServer数据库;2、支持多语言、多模板3、可定制缺货处理功能4、支持附件销售功能5、支持会员组批发功能6、提供页面设计API函数7、支持预付款功能8、配送价格分地区按数学公式计算9、商品支持多类别,可

下载
def describe_shape(shape):
    match shape:
        case Point(x=0, y=0):
            print("原点")
        case Point(x, y):
            print(f"坐标点 ({x}, {y})")
        case Circle(radius=r) if r > 0:
            print(f"圆形,半径为 {r}")
        case Circle():
            print("无效圆形")
        case _:
            print("未知形状")

说明:

  • 匹配
    Point(x=0, y=0)
    表示对象是 Point 类型且 x 和 y 都为 0。
  • Point(x, y)
    提取了属性值并绑定到变量 x 和 y。
  • Circle(radius=r)
    匹配 Circle 实例,并将 radius 值赋给变量 r。
  • 可以结合条件使用
    if
    (称为“守护条件”),如
    if r > 0

常见类模式写法与注意事项

以下是几种常用的类模式写法:

  • 仅匹配类型
    case Point():
    —— 只关心是否是 Point 类型,不提取属性。
  • 提取部分属性
    case Point(x=x):
    —— 只关心 x 值,y 不关心。
  • 位置参数匹配(需支持)
    case Point(0, 0):
    —— 某些类如 namedtuple 支持按位置匹配。
  • 嵌套模式
    case Point(x=Circle(radius=5)):
    —— 可以嵌套复杂结构。

注意:

  • 普通类默认支持关键字参数形式的模式匹配(即
    attr=value
    形式)。
  • 若想支持位置参数匹配,类需要定义
    __match_args__
    属性。
  • 匹配不会调用构造函数,只是检查对象属性是否符合模式。

实际应用场景举例

类模式匹配特别适合处理 API 返回的不同响应类型、事件分发、解析配置等场景。

class Success:
    def __init__(self, data):
        self.data = data

class Error: def init(self, msg, code): self.msg = msg self.code = code

def handleresult(result): match result: case Success(data=d): print(f"成功获取数据: {d}") case Error(msg=m, code=404): print(f"未找到资源: {m}") case Error(msg=m, code=c): print(f"错误 [{c}]: {m}") case : print("未知响应")

这种写法比多个

isinstance()
判断更清晰、简洁。

基本上就这些。Python 的 match 函数结合类模式,让代码更具表达力,尤其是在处理多态数据结构时优势明显。掌握它能让你写出更现代、可读性更强的 Python 代码。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

309

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

778

2023.08.22

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

538

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

422

2024.03.13

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

538

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 14.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

NumPy 教程
NumPy 教程

共44课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号