Python match用法及使用技巧!用错竟让全网用户裸奔?

Python--正则表达式(一) Python–正则表达式 1、正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 2、Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 3、re 模块使 Python 语言拥有全部的正则表达式功能。 4、compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。 5、re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。 一、re. 阅读详情

一个match,竟把用户权限全开!老板:‘你当match是许愿池吗?’ 保姆级避坑指南,从此告别删库跑路!


一、作死现场:match的100种删库姿势

1. 权限漏洞惨案

# 想鉴权,结果全员变管理员  
role = "guest"  
match role:  
    case "admin":  
        grant_admin()  
    # 忘记写guest处理 → 默认分支放行所有权限!  

后果:游客秒变超级管理员,公司数据库被清空

2. 数据解析鬼畜事件

# 想解析JSON,结果把字符串当字典  
data = '{"name": "张三"}'  # 注意是字符串!  
match data:  
    case {"name": name}:  # 永远匹配不到!  
        print(f"用户名:{name}")  
    case _:  
        print("数据错误")  # 正确数据被判死刑  

惨状:用户信息集体消失,客服电话被打爆


二、救命三招:让match从杀手变保镖

招式1:类型匹配必杀技

data = '{"name": "张三"}'  
match data:  
    case str() if is_json(data):  # 先检测类型再解析  
        user = json.loads(data)  
        print(f"用户:{user['name']}")  
    case _:  
        print("非法数据!")  

招式2:守卫条件(Guard Clause)

# 用if过滤复杂条件  
age = 25  
match age:  
    case x if x < 18:  
        print("未成年")  
    case x if 18 <= x < 60:  
        print("打工人")  
    case _:  
        print("退休大佬")  

招式3:结构化匹配黑魔法

# 匹配字典嵌套结构  
user = {"name": "张三", "contact": {"tel": "138xxxx", "email": "xx@xx.com"}}  
match user:  
    case {"name": name, "contact": {"email": email}}:  
        print(f"{name}的邮箱:{email}")  # 精准提取嵌套字段  
    case _:  
        print("数据不完整")  

三、知识点榨汁:match防秃头手册

1. match vs if-else 性能对决

场景match性能优势if-else优势
多条件分支快30%(跳表优化)简单逻辑更直观
类型匹配原生支持,代码简洁需手动type()判断
结构化数据解析降维打击,代码少50%嵌套if地狱

2. 必背匹配模式

  • 类型匹配:case str():

  • 通配符:case _: (默认分支)

  • 或模式:case 401 | 403 | 404:

  • 捕获变量:case {"id": user_id}

3. 禁用禁区(误用毁一生)

  • 忘记默认分支 → 引发MatchError崩溃

在使用match语句时,千万不能忘记设置默认分支。match语句会按照case的顺序依次进行匹配,如果没有一个case能够匹配传入的值,并且还没有设置默认分支(也就是使用case _: ),那么程序就会抛出MatchError异常,导致整个程序崩溃。

举个例子,我们有一个函数根据用户输入的数字返回对应的描述:

def describe_number(num):
    match num:
        case 1:
            return "这是数字1"
        case 2:
            return "这是数字2"
# 这里没有设置默认分支
# 当传入num为其他值时,就会出问题

如果我们调用describe_number(3) ,由于没有匹配的case,也没有默认分支,程序就会无情地抛出MatchError,让之前的努力都白费了。所以,为了程序的健壮性,设置默认分支是很有必要的。

  • 在Python<3.10版本使用 → SyntaxError警告

match语句是 Python 3.10 才引入的新特性。如果你的 Python 版本低于 3.10,当你在代码中使用match语句时,Python 解释器会毫不留情地抛出SyntaxError警告。

想象一下,你满心欢喜地写好了一段使用match语句的代码,觉得简洁又高效,结果运行的时候,屏幕上却弹出了SyntaxError警告,告诉你当前 Python 版本不支持match语句。这时候,要么你升级 Python 版本到 3.10 及以上,要么就只能乖乖地把match语句改回if-elif-else结构,别提多郁闷了。所以,在使用match语句之前,一定要确认好自己的 Python 版本。

  • 匹配海量分支(超20个) → 可读性归零

虽然match语句在处理一些条件判断时,比if-elif-else更加简洁明了,但如果匹配的分支过多(比如超过 20 个),match语句的可读性就会急剧下降。

假设我们要根据一个游戏角色的 20 多种不同职业,来执行不同的初始化操作。如果使用match语句,代码中会有一长串的case子句,每个子句对应一个职业。当我们查看或维护这段代码时,很难快速地找到自己想要的逻辑部分,代码的结构也会变得混乱不堪。

def initialize_character(job):
    match job:
        case "warrior":
            # 战士的初始化逻辑
            pass
        case "mage":
            # 法师的初始化逻辑
            pass
        # 省略中间20多个职业的匹配逻辑
        case "thief":
            # 盗贼的初始化逻辑
            pass

在这种情况下,或许将逻辑拆分成多个函数或者使用其他数据结构来管理,会比单纯使用match语句更加合适,这样才能保证代码的可读性和可维护性。 所以,使用match语句时,也要根据实际情况,合理控制分支数量。


四、总结:match用的好,下班下得早

1. 程序员日常
写match → 漏默认分支 → 线上崩溃 → 通宵Debug → 发现少个下划线 → 怒砸键盘

2. 终极忠告

Python 的match语句简直是代码优化的神器,它让我们的条件判断代码更加简洁、易读、易维护。尤其是在处理多种情况的判断时,match语句的优势就更加明显了。掌握了match语句的使用方法,再加上对各种模式匹配的理解,在 Python 开发中,遇到条件判断的问题时,就能轻松应对啦!以后写代码的时候,不妨多试试用match语句,说不定会给你带来意想不到的惊喜哦!

3. 灵魂拷问
你写的match是精准手术刀,还是全员权限大派送?评论区晒出你的match翻车现场!

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

相关推荐

欧姆龙485通讯示例程序_【精品实验】PLC学习神器与温湿度变送器的通讯

BFH点击蓝字关注我们↑↑↑↑  PLC学习神器提供RS485接口,可支持无协议RS指令、无协议RS2指令、Modbus通讯功能,可通过设置通讯格式改变通讯协议,RS485对应的通讯格式地址是D8400;  本案例以RS485接口与温湿度变送器通讯,通讯格式如下一温湿度变送器的说明书介绍1.1主要技术参数1.2 通讯协议 1、所有通讯回路都应遵照主/从方式。依照主从方式,数据可以在一个主...

weixin_39860201的博客 1万+

Python学习day2

2. 在弹出的设置窗口中选择Project-Python Interpreter,查看当前Python版本,若低于3.10,且下拉框中也没有高于3.10的版本,那就点击旁边的Add Interpreter,安装最新的版本就行啦。以上所有代码去掉注释后均可执行,有些我为了对比验证效果,写了好几种方式,可能看着比较重复。马上要回家过年了,先停更,放假回家好好玩耍,等节后继续学习,希望大家监督。以上内容参考了网上的资料,有些内容为了我自己方便理解,加了一些自己的。语句的代码,就会被识别为语法错误。

weixin_58474077的博客 628

Solidworks钣金设计:折弯系数、K因子与折弯扣除的实战应用解析

本文深入解析Solidworks钣金设计中折弯系数、K因子与折弯扣除的核心概念与实战应用。通过厘清三者间的逻辑关系与换算方法,并结合材料特性、工艺参数及车间实测,指导工程师精准确定展开长度,确保设计图纸与加工实物的一致性,有效提升钣金件设计精度与生产效率。

weixin_29268267的博客 924

Python3.7模块之re

一、特殊字符(这里列出常用的)参考于:https://docs.python.org/zh-cn/3/library/re.html 符号 释义 普通字符 匹配自身 . (点) 在默认模式,匹配除了换行的任意字符。如果指定了标签 DOTALL ,它将匹配包括换行符的任意字符。 ^ (插入符号) 匹配字符串的开头, 并且在 MULTILINE 模式也匹配换行后的首个符号,举例...

1stPeak's Blog 1万+

小米路由器安装Misstar tools 和MIXBOX

1.该教程适用于如下路由器: 小米路由器1代硬盘版(R1D) 小米路由器mini(R1CM) 全新小米路由器硬盘版(R2D) 小米路由器3(R3) 小米路由器3G(R3G) 小米路由器Pro(R3P) 小米路由器HD(R3D) 2.Misstar2.0在线安装 方法如下: 1.根据路由器对应文件解压文件,把解压目录(比如小米3路由器为R3)和offline_install.sh到U盘根目录,并插入路由器 2.ssh登录后,cd到U盘的目录,比如小米3路...

wybarcelona的博客 2万+

揭秘大厂 Unity 红点系统设计:别小看右上角那颗小红点,它能把你项目搞崩

本文详细探讨了游戏大厂如何设计高性能红点系统。红点作为提升用户活跃和转化率的重要工具,需要支持多级联动、动态判断和全局一致性。系统采用观察者模式和树形结构,分为数据管理、逻辑判定、订阅通知和UI展示四大模块,通过事件驱动方式实现高效刷新。文章特别强调了解耦设计、配置化管理和性能优化,并提出了热更新、数据分析等高级应用场景。最终指出,优秀的红点系统需要架构标准化、自动化配置和团队紧密协作,是大型游戏项目的关键技术基础。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 377

【match 语句匹配序列】

这段 Python 代码定义了一个名为的函数,该函数使用 Python 3.10 及以上版本引入的语句对传入的序列进行模式匹配,根据序列的不同结构和元素情况输出相应的信息。之后调用该函数多次,传入不同的序列进行测试。定义了一个名为的函数,它接受一个参数seq,该参数代表要进行匹配的序列。

weixin_54819010的博客 892

注意力机制模块:CA(坐标注意力)二次创新:融合深度可分离卷积,打造 CADS 模块

本文提出CADS模块,将坐标注意力(CA)与深度可分离卷积(DSC)深度融合,优化移动端AI部署效率。通过重构CA的计算范式,用深度卷积替代传统1×1卷积,在保持精度的同时显著降低计算开销。文章深入分析了CA的计算瓶颈和DSC的实际效率问题,详细阐述了CADS的设计原理与PyTorch实现,并提供了多组性能对比数据。该模块可直接应用于YOLO、UNet等主流模型,为移动端AI部署提供高效解决方案。

ZXSXJ的博客 96

[python爬虫]bug汇总

一.python error之re模块的findall与match错误 命名py脚本时,不要与python预留字,模块名等相同,即Python文件名不要使用Python系统库的名字,就是因为使用了Python系统库的名字,所以在编译的时候才会产生.pyc文件。正常的Python文件在编译运行的时候是不会产生.pyc文件的! 这类问题的解决方法则是:更改python脚本的命名,不要与python系统库重合即可 ...

学习如逆水行舟,不进则退 752

RAG效果调优清单(命中率提升3倍)

本文提出了一套工程可落地的RAG(检索增强生成)模型组合方案,强调通过最优组合实现效果、成本和扩展性的平衡。核心架构包括Embedding模型、向量数据库检索、Rerank模型和LLM生成四个环节,推荐了四种具体组合方案:本地最优性价比(bge+reranker+Qwen 7B)、效果优先(bge-large+reranker+14B模型)、高并发(轻量模型+vLLM)和中英混合(多语言模型)。文章指出Embedding决定检索下限,Rerank提升准确率上限,LLM影响最终体验,并提供了不同场景的优化策略

刘一说的IT专栏 523

linux cma alloc fail 问题分析

摘要:日志显示CMA连续内存分配失败(错误码-ENOMEM),请求128页(512KB)内存时因CMA区域不足或内存碎片导致失败。分析发现系统CMA总内存131072KB,空闲65536KB。解决方案包括:1)手动触发内存碎片整理;2)修改设备树或内核配置增大CMA区域(如从16MB增至20MB)。通过调整CONFIG_CMA_SIZE_MBYTES或设备树中的size参数可解决该问题。

陌上花开缓缓归以的博客 798

python中的match匹配语句

本文简单用一些例子来说明python中match的用法

WhoisPo的专栏 619

【Kubernetes】Kubernetes 安全沙箱深度对比:gVisor vs Kata Containers

Kubernetes安全沙箱深度对比:gVisor和Kata Containers在架构、性能与安全性方面各有特点。gVisor通过用户态内核(Sentry)实现软件隔离,启动快(毫秒级)但CPU开销大(20-30%),适合Web服务等场景。Kata Containers采用轻量级虚拟机提供硬件级隔离,启动较慢(1-2秒)但兼容性更好,适合金融等高安全需求。测试显示gVisor在动态请求下性能下降33%,而Kata性能接近原生。建议根据场景选择:多租户/快速启动用gVisor,敏感数据/极致安全用Kata,

九师兄 178

python re.match报错

包名和正则内置的包名重了。

qq_45467707的博客 578

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python 中不能用re.match()匹配字符串尾,需要使用re.search(pattern, string[, flags])

Python 中不能用re.match()匹配字符串尾,需要使用re.search(pattern, string[, flags])

weixin_41413693的博客 921

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

记录一个 Python 的 re.match() 的小坑

我用下面的代码: re.match(r'"cid":\s\d+', target_script_tag.text) 匹配下面的字符串内容(即 target_script_tag.text 的值): window.__INITIAL_STATE__ = { "aid": 214053649, "bvid": "BV1qa411J7vh", "p": 1, "episode": "", "videoData": {

Cyber 1476

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

多python版本共存时配置环境变量的建议

之前装了2个python版本想用pip安装东西到python3.10上 。输入pip install xxxx 结果总装错 装到3.8。改完之后(下图)现在好了。 因为归根结底它会去系统环境变量这里,看你哪个环境变量的位置靠前,就会先去找哪一个。 然后如果要用启动python3.8 就去python38文件夹下 把python.exe 复制一份 改名叫 python38.exe 之后去cmd 输入python38 就启动成功了。 再如果要用pip安装在3.8上,同理 去python38/scrip..

JackLi2021的博客 2179

python error之re模块的findall与match错误

今天写了这么一段代码,怎么都看不出哪里错了,可老是说AttributeError: module ‘re’ has no attribute ‘match’ 找了好久终于找到明天,原来是文件名字与模块名重复了,我晕,希望大家不要犯这样的错误了,import redef re_pattern_syntax(): print(re.match(r'abc\d$','abc1\nabc2',gr

张函 4446

Python高级——正则表达式 re模块1.match方法

python:正则表达式 一、什么是正则表达式 正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文本。 正则表达式,是一个独立的技术,很多编程语言支持正则表达式处理。 Wiki:正则表达式(英语:Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,在计算机科学中,是指一个用来描述或者匹配

编程我在行 11万+

python中的match对象

match.group()返回匹配对象的一个或多个分组。不含参数的时候,返回整个匹配对象含有一个参数的时候,返回参数对应分组的对象含有多个参数的时候,以元组的形式返回参数对应的分组&gt;&gt;&gt; m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist") &gt;&gt;&gt; m.group(0) # The entir...

坑底Z蛙 1万+

正则表达式中在match和search踩过的坑

昨天写一简单的正则表达式匹配,错用了match,导致文件中明明是有这个字符串的,却一直返回None,怎么都匹配不到,后来各种百度,发现用错了匹配的函数,因此,特来说明match和search的区别:正则表达式中的match 和 search 都是按模式匹配字符串,也都可以按 group()输出匹配的内容,但是他们的区别到底在什么地方?re.match:仅在字符串的开头进行匹配,只报告一次成功的匹配...

TanX的博客 1312

python2 踩过的坑,一个个来填(持续更新中)

__init__.py的作用 import的时候会调用该文件; 文件中的__all__(列表)用于导入全部模块; __init__.py文件将文件夹变为python模块/包; python list extend()方法: 用于在列表末尾追加另一个列表(append是追加一个值); __import__() :动态加载类和函数 参数只能是字符串,与import作用差不...

wenjun258120的专栏 538

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 413

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 235

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 208
上一篇: Python循环pass用法及使用技巧!90%程序员竟用成删库神器?
下一篇: Python函数定义详细教程:参数类型详解,报错UnboundLocalError怎么解决。
筱涵哥
博客等级 码龄5年 418粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值