当前位置: 首页 > news >正文

笔记8——模式匹配 match语句(仅在Python 3.10及以上版本中可用)

文章目录

  • 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用)
    • 基本语法
    • 基本匹配操作
    • 应用场景

模式匹配 match语句(仅在 Python 3.10及以上版本 中可用)

  • Python 3.10 及以上版本中才引入了 match 语句
  • 用于简化复杂的条件判断和数据解构;类似于其他语言中的 switch-case 语句,但功能更强大,支持 结构化模式匹配 (Structural Pattern Matching)

基本语法

# match subject:
#     case pattern1:
#         #当 subject 匹配 pattern1 时执行的代码
#     case pattern2:
#         #当 subject 匹配 pattern2 时执行的代码
#     ...
#     case _:
#         # 当 subject 不匹配时任何前面的模式时执行的代码

基本匹配操作

  • 匹配常量
    可以匹配 单个值
x = 902

match x:
    case 902:
        print('Happy birthday!')
    case _:
        print('this is not my birthday')

在这里插入图片描述
也可以匹配 多个值 ,多个值之间用 | 分隔:

x = -2
 
match x:
    case 0:
        print('x等于0')
    case 1|2|3|4:
        print('x为正数')
    case -1|-2|-3|-4:
        print('x为负数')
    case _:
        print('shayebushi')

在这里插入图片描述

  • 匹配变量
point = (0,0)
# point = (1,-1)

match point:
  case (x,y):
      print(f'Coordinates are ({x},{y})')
#如果 point 是一个包含两个元素的元组,会将元组的值分别赋给 x 和 y 变量上并打印坐标

在这里插入图片描述

  • 匹配元组
# tuple = () # 输出: 空元组
tuple = (1,) # 输出: 单元素元组,元素为 1
# tuple = (1, 2) # 输出: 双元素元组,元素为 1,2
# tuple = (1, 2, 3, 4, 5) # 输出: 多个元素元组,前两个为 1 和 2,剩余 (3, 4,5)

match tuple:
    case ():
        print("空元组")
    case (x,):
        print(f"单元素元组,元素为 {x}")
    case (x, y):
        print(f"双元素元组,元素为 {x}{y}")
    case (x, y, *rest):
        print(f"多个元素元组,前两个为 {x}{y},剩余 {rest}")

在这里插入图片描述

  • 匹配列表
    假设用户输入一个命令,用 args = [‘gcc’,‘hello.c’] 存储,用 match 匹配来解析这个列表
args = ['gcc','hello.c','world.c']
# args = ['clean']
# args = ['gcc']
match args:
  # 如果列表中仅有 'gcc' 字符串,没有指定文件名,报错:
  case ['gcc']:
      print('gcc: missing source file(s).')
  # 出现gcc,且至少指定了一个文件:
  # 列表第一个字符串是 'gcc',第二个字符串赋给变量 files,后面的所有任意个字符串绑定到 *files(表明至少指定一个文件)
  case ['gcc',file1,*files]:
      print('gcc compile:' + file1 + ',' + ','.join(files))
  # 列表仅有 'clean'一个字符串:
  case ['clean']:
      print('clean')
  # 其他所有情况
  case _:
      print('invalid command.')

在这里插入图片描述

  • 匹配字典
d = {'name':'echo','age':'24'}

match d:
    case {"name": name, "age": age}:
        print(f"用户 {name},年龄 {age}")
    case {"error": code}:
        print(f"错误码: {code}")
    case _:
        print("未知格式")

在这里插入图片描述

  • 条件匹配
    可以在 case 语句中使用 if 来添加额外的条件(守卫条件),只有当模式匹配且守卫条件为 True 时,才会执行相应的代码块
# value = 0
value = 10
# value = -10

match value:
    case x if x < 0:
        print("负数")
    case x if x == 0:
        print("零")
    case x if x > 0:
        print("正数")

在这里插入图片描述

应用场景

  • 处理复杂的条件分支:多个复杂的条件需要判断时
  • 解析数据结构:解析JSON数据、处理复杂的配置文件
  • 状态机实现:根据不同状态和事件进行状态转换的判断

相关文章:

  • Qt工作总结03 <qSort按某一属性进行排序>
  • SpringAI集成DeepSeek实战
  • 【Linux网络-网络基础】计算机网络背景+协议+OSI七层模型
  • 解释 Git 的基本概念和使用方式。
  • 渗透利器:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
  • 2025前端面试题超全面解析(附答案与深度扩展)
  • PicoShare实操:轻松实现远程文件共享无需公网IP与云服务器
  • 大数据学习之SparkStreaming、PB级百战出行网约车项目一
  • 华纳云:如何从服务器日志中发现僵尸进程?
  • UGUI Canvas为Overlay模式下的UI元素的position和localPosition
  • 2月14日笔记
  • 安装OpenJDK21(linux、macos)
  • 站群服务器和普通服务器有哪些不同之处?
  • 【分布式理论9】分布式协同:分布式系统进程互斥与互斥算法
  • 软著申请(一)实名认证【2025年最新版】
  • 在本地校验密码或弱口令 (windows)
  • 汽车 OTA 升级:提升下载与升级速度,优化用户体验
  • iOS主要知识点梳理回顾-4-运行时类和实例的操作
  • MAC 系统关屏幕后电量消耗极快 Wake Requests
  • 服务器中部署大模型DeepSeek-R1 | 本地部署DeepSeek-R1大模型 | deepseek-r1部署详细教程
  • 明星同款撕拉片,为何能炒到三四百一张?
  • 新华时评:直播间里“家人”成“韭菜”,得好好管!
  • 秦洪看盘|重估叙事主题卷土重来,给A股注入新活力
  • 多人称华为手机忽现拍照模糊疑存缺陷,售后回应:主摄像头故障
  • 罗氏制药全新生物制药生产基地投资项目在沪启动:预计投资20.4亿元,2031年投产
  • “救护车”转运病人半路加价,从宝鸡到西安往返都要多收钱