DataLearner 标志DataLearnerAI
最新AI资讯
大模型排行榜
大模型评测基准
大模型列表
大模型对比
资源中心
工具
语言中文
DataLearner 标志DataLearner AI

专注大模型评测、数据资源与实践教学的知识平台,持续更新可落地的 AI 能力图谱。

产品

  • 评测榜单
  • 模型对比
  • 数据资源

资源

  • 部署教程
  • 原创内容
  • 工具导航

关于

  • 关于我们
  • 隐私政策
  • 数据收集方法
  • 联系我们

© 2026 DataLearner AI. DataLearner 持续整合行业数据与案例,为科研、企业与开发者提供可靠的大模型情报与实践指南。

隐私政策服务条款
  1. 首页/
  2. 博客列表/
  3. 博客详情

Python3.10版本的结构模式匹配(structural pattern matching)简介

2021/10/14 22:45:20
2,034 阅读
pythonstructuralpatternmatching结构模式匹配

Python最新正式版本3.10在10月4日已经发布。这个版本从2020年5月开始开发,经历差不多一年半的时间终于正式发布。当然每一个新版本都有很多新功能。我们将持续关注新功能,在这篇文章中,我们将简述3.10中新功能中的语法——结构模式匹配(structural pattern matching)。

  • 一、概述
  • 二、Literal patterns
  • 三、Wildcard patterns
  • 四、Sequence Patterns
  • 五、Mapping Patterns
  • 六、Class Patterns
  • 七、Capture patterns
  • 八、OR Patterns
  • 九、AS Patterns

一、概述

Python3.10新增语法主要是新增支持结构模式匹配(structural pattern matching)语法(PEP 636)。

这个匹配其实类似于C++/Java中的switch语句,也就是根据匹配到的情况选择执行后面的程序。不过,结构模式匹配支持类似正则匹配的方式来匹配cases。

这个语法用法如下:

match expression:
    case pattern1: # do something
    case pattern2: # do something else

这里的pattern1和pattern2支持很多类型,我们一一说明。

二、Literal patterns

字面匹配,就是数字、字符这种简单类型。示例如下:

def weekday_name(weekday_num):
    match weekday_num:
        case 1:
            return "Monday"
        case 2:
            return "Tuesday"
        case 3:
            return "Wednesday"
        case 4:
            return "Thursday"
        case 5:
            return "Friday"
        case 6:
            return "Saturday"
        case 7:
            return "Sunday"

三、Wildcard patterns

通配符匹配,就是英文单下划线“_”的匹配,表示不符合其它任意一种情况。示例如下:

def weekday_name(weekday_num):
    match weekday_num:
        case 1:
            return "Monday"
        case 2:
            return "Tuesday"
        case 3:
            return "Wednesday"
        case 4:
            return "Thursday"
        case 5:
            return "Friday"
        case 6:
            return "Saturday"
        case 7:
            return "Sunday"
        case _:
            return "Invalid. weekday_num should be an integer between 1 and 7"

四、Sequence Patterns

序列匹配,就是根据匹配到的序列情况来返回结果。如下例子:

def rank_candidates(candidates):
    match candidates:
        case [first]: # when num of candidates is 1
            return {"first": first}

        case [first, second]: # when num of candidates is 2
            return {"first": first, "second": second}

        case [first, second, third]: # when num of candidates is 3
            return {"first": first, "second": second, "third": third}

        case [first, second, third, *rest]: # when num of candidates is >3
            return {"first": first, "second": second, "third": third}

其实就是看列表长度和列表元素情况。

五、Mapping Patterns

匹配mapping模式,例子如下:

for repo in repositories:
    match repo:
        case {"language": "Python", "name": name}:
            print(name)

就是说找到repositories中的dict,其中必须是包含"language": "Python"这个键值对,同时必须包含一个key是name,但value可以是其它任意内容的结果,最终输出name。

六、Class Patterns

就是类型匹配,话不多说,例子如下:

def sum_two_integers(num1, num2):
    match num1, num2:
        case int(num1), int(num2):
            return num1 + num2

当num1和num2都是整型的时候,返回相加结果。

七、Capture patterns

捕获模式,也就是从某个列表中获取对应的元素。

name = "Tarzan Mbogi Genje"

match name.split():
    case first_name, second_name, third_name:
        print(f"First name: {first_name}" )

八、OR Patterns

OR模式由两个或更多的模式组成,用竖条分隔。要使模式成功,其中一个模式必须匹配。如果两个模式都不匹配,则匹配失败。

def check_type(val):
    match val:
        case str(val):
            return "String"
        case int(val) | float(val):
            return "Number"

九、AS Patterns

AS模式允许我们指定一个结构约束并同时绑定到一个值。也就是某些情况在一个case中可以匹配到多个模式。

def check_type(val):
    match val:
        case str() as val:
            return "String"
        case int() | float() as val:
            return "Number"

DataLearner 官方微信

欢迎关注 DataLearner 官方微信,获得最新 AI 技术推送

DataLearner 官方微信二维码
返回博客列表

相关博客

  • PyTorch 2.0发布——一个更快、更加Pythonic和灵活的PyTorch版本,让Tranformer运行更快!
  • 0基础安装搭建Visual Studio Code开发环境——Python开发环境
  • KerasCV——一个新的简单易用的计算机视觉(CV)算法库
  • Python for Data Analysis第三版免费在线学习网站来临!
  • Python3.11最新特性来了,多个好特性提升!
  • 为什么Python可以处理任意长度的整数运算——Python原理详解
  • Python编程环境搭建——小白起步教程!
  • Bloomberg发布的最新的memray——Python内存分析器是什么?

热门博客

  • 1Dirichlet Distribution(狄利克雷分布)与Dirichlet Process(狄利克雷过程)
  • 2回归模型中的交互项简介(Interactions in Regression)
  • 3贝塔分布(Beta Distribution)简介及其应用
  • 4矩母函数简介(Moment-generating function)
  • 5普通最小二乘法(Ordinary Least Squares,OLS)的详细推导过程
  • 6使用R语言进行K-means聚类并分析结果
  • 7深度学习技巧之Early Stopping(早停法)
  • 8手把手教你本地部署清华大学的ChatGLM-6B模型——Windows+6GB显卡本地部署