Python模式匹配match case的实现

 更新时间:2025年10月01日 11:55:32   作者:Doris_2023  
Python 3.10 引入 match 语句,替代冗长的 if-elif 链,提升可读性,支持精确匹配、守卫条件、多值匹配、值绑定及解包操作,本文主要介绍了Python模式匹配match case的实现

核心概念

当程序需要针对一个变量的多种可能值进行判断时,传统的 if ... elif ... elif ... else 结构会变得冗长且可读性较差。Python 3.10 引入了 match 语句(也称为模式匹配),它提供了一种更简洁、更直观的方式来处理多分支条件判断。

1. 基本match语句

  • 功能:将一个目标(如变量)与一系列模式(case)进行比较,并执行第一个匹配成功的分支。
  • 与传统if对比
    • if 写法 (冗长):
      score = 'B'
      if score == 'A':
          print('score is A.')
      elif score == 'B':
          print('score is B.')
      elif score == 'C':
          print('score is C.')
      else:
          print('invalid score.')
      
    • match 写法 (清晰):
      score = 'B'
      match score:
          case 'A':
              print('score is A.')
          case 'B':
              print('score is B.')
          case 'C':
              print('score is C.')
          case _: # `_` 是通配符,匹配任何值
              print('invalid score.')
      
  • 关键点- case _: 必须放在最后,用于捕获所有未被前面 case 匹配的情况,类似于 else
    • 语法结构更加规整,意图更明确。

2. 复杂匹配模式

match 的强大之处在于其灵活的匹配模式,远不止简单的相等判断。

  • 带守卫条件的匹配:使用 ifcase 内进行额外条件检查。
  • 多值匹配:使用 | (或)来匹配多个值。
  • 值绑定:在匹配的同时,将匹配到的值捕获到变量中。

示例

age = 15

match age:
    case x if x < 10:         # 匹配所有小于10的值,并将其绑定到变量x
        print(f'< 10 years old: {x}')
    case 10:                  # 精确匹配单个值
        print('10 years old.')
    case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18: # 匹配多个值
        print('11~18 years old.')
    case 19:
        print('19 years old.')
    case _:
        print('not sure.')

3. 高级应用:匹配列表(解包匹配)

match 语句可以匹配复杂的数据结构,如列表,并能进行解包操作,这使其功能非常强大。

示例:解析命令行参数

args = ['gcc', 'hello.c', 'world.c'] # 模拟用户输入的命令

match args:
    # 模式1: 列表只包含一个元素'gcc'
    case ['gcc']:
        print('gcc: missing source file(s).')

    # 模式2: 列表第一个元素是'gcc',第二个是任意值(绑定到file1),后面是0个或多个值(绑定到files)
    case ['gcc', file1, *files]:
        print(f'gcc compile: {file1}, {", ".join(files)}')

    # 模式3: 列表只包含一个元素'clean'
    case ['clean']:
        print('clean')

    # 默认情况
    case _:
        print('invalid command.')
  • *files:这是一个通配符,它可以捕获列表中的零个或多个剩余元素。这使得匹配可变长度的列表变得非常简单。
  • 工作原理match 会按顺序尝试匹配每个 case 的模式。例如,对于 ['gcc', 'hello.c', 'world.c'],它会匹配第二个模式,并赋值 file1 = 'hello.c'files = ['world.c']

总结要点

  1. 为什么使用 match:替代冗长的 if-elif-else 链,极大地提高代码的可读性和简洁性,尤其是在处理多个枚举值或复杂数据结构时。
  2. 基本语法:使用 match TARGET: 和一系列 case PATTERN: 进行匹配。
  3. 强大功能
    • 精确匹配case 'A':
    • 或匹配case 11 | 12 | 13:
    • 守卫条件case x if x < 10:
    • 通配符case _: (匹配任何值)
    • 解包匹配case ['cmd', arg1, *args]: (匹配并提取列表内容)
  4. 适用场景:处理状态码、命令解析、处理JSON或嵌套数据等任何需要多分支判断的场景。

match 语句是Python现代化的重要特性,掌握它可以让你的代码更加优雅和Pythonic。

将之前的练习题 重新写一写

hight = 1.50
weight = 50.5
bmi = weight / hight ** 2
print("bmi=", bmi)

match bmi:
    case _ if bmi < 18.5:
        print("过轻")
    case _ if 18.5 <= bmi < 25:
        print("正常")
    case _ if 25 <= bmi < 28:
        print("过重")
    case _ if 28 <= bmi < 32:
        print('肥胖')
    case _:
        print("严重肥胖")

到此这篇关于Python模式匹配match case的实现的文章就介绍到这了,更多相关Python模式匹配match case内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中Async语法协程的实现

    Python中Async语法协程的实现

    这篇文章主要介绍了Python中Async语法协程的实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Python matplotlib绘图建立画布及坐标系

    Python matplotlib绘图建立画布及坐标系

    这篇文章主要介绍了Python matplotlib绘图建立画布及坐标系,建立画布 figsize,它用width和height来控制画布的宽和高,下面来一起俩姐更多内容吧
    2021-12-12
  • 如何利用python开发一款日志自动查找复制小工具

    如何利用python开发一款日志自动查找复制小工具

    本文介绍使用Python开发日志筛选工具,自动复制符合时间范围(02:00-20:00)和大小(>1KB)的日志至桌面,提升效率并减少遗漏,工具通过PyInstaller打包为exe,支持自定义图标与版本信息
    2025-09-09
  • Python实现的石头剪子布代码分享

    Python实现的石头剪子布代码分享

    这篇文章主要介绍了Python实现的石头剪子布代码分享,本文和另一篇JavaScript实现的石头剪刀布游戏源码是姐妹篇,需要的朋友可以参考下
    2014-08-08
  • OpenCV图像变换之傅里叶变换的一些应用

    OpenCV图像变换之傅里叶变换的一些应用

    这篇文章主要给大家介绍了关于OpenCV图像变换之傅里叶变换的相关资料,傅里叶变换可以将一幅图片分解为正弦和余弦两个分量,换而言之,他可以将一幅图像从其空间域(spatial domain)转换为频域(frequency domain),需要的朋友可以参考下
    2021-07-07
  • 利用Python实现读取照片的Exif信息

    利用Python实现读取照片的Exif信息

    这篇文章主要为大家详细介绍了如何利用Python实现读取照片的Exif信息,文中的示例代码简洁易懂,具有一定的参考价值,有需要的小伙伴可以参考下
    2023-10-10
  • Windows切换python版本的超快捷方法(推荐!)

    Windows切换python版本的超快捷方法(推荐!)

    这篇文章主要介绍了在Windows中切换Python版本的快捷方法,通过编辑系统变量中的Path变量,可以快速切换到所需的Python版本,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • pandas聚合分组的具体使用

    pandas聚合分组的具体使用

    使用数据库时,我们利用查询操作对各列或各行中的数据进行分组,可以针对其中的每一组数据进行各种不同的操作,本文主要介绍了pandas聚合分组,感兴趣的可以了解一下
    2024-03-03
  • Python读取中文路径出现乱码的问题解决

    Python读取中文路径出现乱码的问题解决

    本文主要介绍了Python读取中文路径出现乱码的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Python中三种条件语句示例介绍

    Python中三种条件语句示例介绍

    大家好,本篇文章主要讲的是Python中三种条件语句示例介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01

最新评论