Python 教程(七):match...case 模式匹配

news2024/9/9 1:08:20

目录

    • 专栏列表
    • 前言
    • 基本语法
      • match 语句
      • case 语句
    • 模式匹配的类型
    • 示例
      • 具体值匹配
      • 类型匹配
      • 序列匹配
      • 星号表达式
      • 命名变量
      • 复杂匹配
    • 模式匹配的优势
    • 总结

专栏列表

  • Python教程(一):环境搭建及PyCharm安装
  • Python 教程(二):语法与数据结构
  • Python 教程(三):字符串特性大全
  • Python 教程(四):Python运算符合集
  • Python 教程(五):理解条件语句和循环结构
  • Python 教程(六):函数式编程
  • Python 教程(七):match…case 模式匹配

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


前言

在 Python 中,matchcase 是一种新的语法结构,首次出现在 Python 3.10 中。这种结构提供了一种类似于其他编程语言中 switchcase 的功能,允许基于不同条件执行不同的代码块。

基本语法

match 语句

match 语句是 Python 中的模式匹配语句,它允许你将一个值与多个模式进行匹配,并根据匹配结果执行相应的代码块。

match value:
    case pattern1:
        code_block1
    case pattern2:
        code_block2
    ...
    case _:
        default_code_block

case 语句

case 语句是 match 语句的一部分,用于定义一个或多个模式,当 match 语句中的值与这些模式匹配时,将执行相应的代码块。

模式匹配的类型

  1. 具体值匹配:匹配一个具体的值。
  2. 类型匹配:匹配一个特定的数据类型。
  3. 序列匹配:匹配一个序列,例如列表或元组。
  4. 星号表达式:匹配序列中的部分元素。
  5. 命名变量:在模式中使用变量名,将匹配的值赋给这些变量。
  6. 复杂匹配: 可以匹配多个值、匹配一定范围,并且把匹配后的值绑定到变量

示例

具体值匹配

某个学生的成绩只能是 A、B、C,用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('score is ???.')

类型匹配

def match_type(value):
    match value:
        case int():
            print("这是一个整数")
        case float():
            print("这是一个浮点数")
        case str():
            print("这是一个字符串")
        case _:
            print("未知类型")

match_type(10)  # 输出:这是一个整数
match_type(3.14)  # 输出:这是一个浮点数
match_type("hello")  # 输出:这是一个字符串
match_type([1, 2, 3])  # 输出:未知类型

在这里插入图片描述

序列匹配

def match_sequence(value):
    match value:
        case [1, 2, 3]:
            print("匹配到 [1, 2, 3]")
        case (1, num):
            print("匹配到元组,第一个元素为 1",'第二个数', num)
        case [1, *rest]:
            print(f"匹配到以 1 开头的列表,其余元素为 {rest}")
        case _:
            print("匹配到其他值")

match_sequence([1, 2, 3])  # 输出:匹配到 [1, 2, 3]
match_sequence([1, 4, 5])  # 输出:匹配到以 1 开头的列表,其余元素为 [4, 5]
match_sequence((1, 2))  # 输出:匹配到元组,第一个元素为 1 第二个数 2
match_sequence("hello")  # 输出:匹配到其他值

在这里插入图片描述

星号表达式

def match_sequence(value):
    match value:
        case [1, *rest]:
            print(f"匹配到以 1 开头的列表,其余元素为 {rest}")
        case _:
            print("匹配到其他值")

match_sequence([1, 2, 3])  # 输出:匹配到以 1 开头的列表,其余元素为 [2, 3]
match_sequence([1, 4, 5])  # 输出:匹配到以 1 开头的列表,其余元素为 [4, 5]

在这里插入图片描述

命名变量

def match_named(value):
    match value:
        case (a, b):
            print(f"匹配到元组,第一个元素为 {a},第二个元素为 {b}")
        case {"name": name, "age": age}:
            print(f"匹配到字典,名字为 {name},年龄为 {age}")
        case _:
            print("匹配到其他值")

match_named((1, 2))  # 输出:匹配到元组,第一个元素为 1,第二个元素为 2
match_named({"name": "Alice", "age": 30})  # 输出:匹配到字典,名字为 Alice,年龄为 30
match_named([1, 2, 3])  # 输出:匹配到其他值

在这里插入图片描述

复杂匹配

age = 15

match age:
    case x if x < 10:
        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.')


# 11~18 years old.

在这里插入图片描述

模式匹配的优势

  1. 代码可读性:模式匹配使得代码更易于理解和维护。
  2. 减少嵌套:可以减少 if-elif-else 语句的嵌套,使代码更简洁。
  3. 类型安全:通过类型匹配,可以确保变量的类型正确,减少类型错误。

总结

matchcase 是 Python 3.10 中引入的新特性,它们提供了一种强大且灵活的方式来处理条件逻辑。通过学习这些特性,你可以编写更清晰、更高效的代码。希望本教程能帮助你更好地理解和使用这些新特性。如果你有任何问题或需要进一步的帮助,请随时联系我们。

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

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

相关文章

智能环保气膜网球馆:大空间与防雾霾的完美结合—轻空间

在现代都市生活中&#xff0c;空气质量和空间限制成为许多体育设施的挑战。气膜技术的出现&#xff0c;为这些问题提供了卓越的解决方案。我们的智能环保气膜网球馆&#xff0c;不仅拥有宽敞的空间&#xff0c;还具备卓越的防雾霾功能&#xff0c;为体育爱好者提供了一个理想的…

牧野电火花机床联网

一、找到可选项 选择主面板中的【可选项】按钮&#xff0c;弹出来的对话框如下图所示。 二、属性设定 在左下角部分找到【属性设定】&#xff0c;如序号一所示&#xff0c;在弹出的属性设定对话框中选中【牧野EDM服务器】&#xff0c;如下图所示。 三、选则MES模式 按照上图…

苹果推送iOS 18.1带来Apple Intelligence预览

&#x1f989; AI新闻 &#x1f680; 苹果推送iOS 18.1带来Apple Intelligence预览 摘要&#xff1a;苹果向iPhone和iPad用户推送iOS 18.1和iPadOS 18.1开发者预览版Beta更新&#xff0c;带来“Apple Intelligence”预览。目前仅支持M1芯片或更高版本的设备。Apple Intellige…

Electron学习笔记(一)基础环境

目录 前言 基础环境准备 安装 Node.js 配置项目文件 通过代理服务安装 通过国内仓库安装 一些常见问题&#xff1a; 前言 一个新手学习Electron的笔记&#xff0c;记录为主&#xff0c;仅供参考。 其他文章见专栏目录。 基础环境准备 开发之前先将基础环境搭建好。 …

灯具外贸公司用什么企业邮箱好

灯具外贸公司面对海外市场的推广、产品销售、客户沟通、市场信息收集等多重需求&#xff0c;选择一个合适的企业邮箱显得尤为重要。本文将介绍灯具外贸公司为什么应选择Zoho Mail企业邮箱&#xff0c;并详细探讨其优势和功能。 一、公司背景 广东省深圳市光明新区&#xff0c…

创建 Llama-3.1-70B-Japanese-Instruct-2407 的 Ollama 模型

创建 Llama-3.1-70B-Japanese-Instruct-2407 的 Ollama 模型 1. 下载 gguf 文件2. 创建 Modelfile3. 创建 Ollama 模型4. 运行 Ollama 模型5. &#xff08;可选&#xff09;其他 Modelfile 1. 下载 gguf 文件 使用浏览器打开 https://huggingface.co/mmnga/Llama-3.1-70B-Japa…

DELL服务器RAID配置详细教程

DELL服务器RAID配置教程 在启动电脑的时候按CTRLR 进入 RAID 设置见面如下图 名称解释&#xff1a; Disk Group&#xff1a;磁盘组&#xff0c;这里相当于是阵列&#xff0c;例如配置了一个RAID5&#xff0c;就是一个磁盘组 VD(Virtual Disk)&#xff1a; 虚拟磁盘&#xff…

FFmpeg模块详解:深入理解多媒体框架的构成

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

为了人才任正非一个月蹲守人家单位门口,刘备三顾茅庐算啥!

张一鸣说&#xff1a;"一名优秀的CEO首先应该是优秀的HR&#xff01;”这句话广为流传&#xff0c;此言差矣&#xff0c;一名卓越的创始人首先应该是最卓越的猎头&#xff0c;比如任正非&#xff01; 全球的创始人也没几个人能够做像任正非那样重视人才的&#xff0c;一旦…

成为git砖家(7): posh-git的安装和使用

文章目录 1. PowerShell 里的 git 默认使用体验不够好2. posh-git 介绍2.1 安装 posh-git2.2 PS1 显示的内容2.3 补全分支 1. PowerShell 里的 git 默认使用体验不够好 在 Windows 系统上&#xff0c;安装了 git for windows 后&#xff0c; git bash 里的体验确实不错。 但是…

【云原生】kubernetes弃用docker,containerd风华正茂,何以承载云原生?

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

JAVA基础 - 泛型

目录 一. 简介 二. 集合泛型 三. 自定义泛型 四. 自定义泛型类和普通类的区别 一. 简介 泛型是 Java 语言中一种强大的特性&#xff0c;它允许在定义类、接口和方法时使用类型参数&#xff0c;从而增加了代码的类型安全性和复用性。 类型安全性&#xff1a; 使用泛型可以…

leetcode日记(60)编辑距离

感觉这题不是按难度划分的而是按代码长度划分的…看了答案才知道怎么做&#xff0c;其实思路很简单&#xff0c;但是特别难想…… 意思是使用动态规划&#xff0c;依次计算由word1的前i个字母到word2的前j个字母要经历的最小变化数。 min D[i][j]min(D[i-1][j]1,D[i][j-1]1,D…

spring 中包自动扫描之 component-scan 解析

在 spring 中&#xff0c;为简化 bean 的配置&#xff0c;在 spring-context 模块下提供了包的自动扫描功能&#xff0c;将配置的包及其子包下的所有符合条件的类都注册到 BeanFactory 中。下面来看下具体是怎么实现的。 配置 <context:component-scan base-package"…

【MIT 6.5840(6.824)学习笔记】Raft

1 脑裂 许多容错系统使用一个单主节点来决定主副本。 MapReduce&#xff1a;由单主节点控制计算复制。GFS&#xff1a;主备复制数据&#xff0c;并由单主节点确定主拷贝的位置。VMware FT&#xff1a;主虚机和备份虚机之间复制指令&#xff0c;需要单点的Test-and-Set服务确认…

[0729] X-CMD 发布 v0.4.3:借助 fzf ,提升用户使用体验

目录 X-CMD 发布 v0.4.3&#x1f50e; ll&#x1f50e; jq&#x1f50e; yq&#x1f50e; man X-CMD 发布 v0.4.3 &#x1f50e; ll 新增 --fzf 子命令 该命令借助 fzf 为用户提供了一种高效查找文件和目录的相关信息的方法&#xff0c;类似于文件管理器。 # 使用 fzf 查找文…

AI智能名片O2O商城小程序源码在社区团购中的应用与红利深度探索

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;社区团购以其独特的商业模式和强大的市场渗透力&#xff0c;成为新零售领域的一股不可忽视的力量。而AI智能名片O2O商城小程序源码&#xff0c;作为技术创新的集大成者&#xff0c;正逐步渗透并深刻改变着社区团购的运作模式和…

从零开始编写一个Chrome插件:详细教程

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

科普文:抽屉合同/协议

抽屉协议是指一种在特定情境下&#xff0c;当事人之间私下签订的、不公开披露的协议。通常情况下&#xff0c;除了协议双方外&#xff0c;其他人并不知道这份协议的存在。这种协议在需要时会被拿出来&#xff0c;因为它已经过双方签字盖章&#xff0c;同样具有法律效应。 背景…