高级Pythonmatch函数自定义模式_自定义模式高级match函数Python
match-case是Python 3.10引入的结构化模式匹配特性,可替代if-elif链,支持字面量、序列、映射、类实例等模式匹配,并通过if条件和__match_args__实现自定义逻辑。
Python 中并没有内置的 match 函数支持自定义模式匹配,但自 Python 3.10 起,引入了 match-case 语句(也称为结构化模式匹配),它极大地增强了条件分支处理复杂数据结构的能力。通过这个特性,你可以实现类似其他语言中“高级模式匹配”的功能。
什么是 match-case 模式匹配?
Python 的 match-case 是一种更清晰、更强大的替代 if-elif 链的方式,尤其适用于解析复杂的数据类型,如嵌套列表、字典或类实例。它允许你根据值的结构进行匹配,而不仅仅是值本身。
基本语法如下:
match subject:
case pattern1:
action1
case pattern2:
action2
...
case _:
default_action
登录后复制
常见模式类型与用法
你可以使用多种模式来匹配不同的数据结构:
- 字面量模式:匹配具体的值,比如数字、字符串。
- 变量模式:任何名称都会成功匹配并绑定该值。
- 通配符 _:匹配任意内容,通常放在最后作为默认情况。
- 序列模式:用于匹配列表或元组,如 [a, b, c] 或 (a, b)。
- 星号表达式:*rest 可以捕获剩余元素。
- 映射模式:匹配字典中的键值对。
- 类模式:匹配对象实例,并提取其属性。
示例:解析命令输入
def handle_command(command):
match command:
case ['quit']:
print("退出程序")
case ['move', direction] if direction in ['north', 'south']:
print(f"向 {direction} 移动")
case ['attack', target]:
print(f"攻击 {target}")
case ['pick', *items]:
print(f"拾取了: {', '.join(items)}")
case _:
print("无效指令")
登录后复制
如何实现“自定义”匹配逻辑?
虽然 match-case 本身不直接支持用户定义的匹配规则(例如正则或谓词),但可以通过 if 条件 guard 和类的 __match_args__ 实现高度定制化行为。
ExcelFormulaBot
在AI帮助下将文本指令转换为Excel函数公式
82
查看详情
- 在 case 后使用 if 子句添加额外判断条件。
- 为类设置 __match_args__ 属性,使其支持解包式匹配。
示例:带条件的匹配
point = (15, 8)
match point:
case (x, y) if x > y:
print(f"x={x} 大于 y={y}")
case (x, y):
print(f"x={x}, y={y}")
登录后复制
示例:自定义类支持模式匹配
class Point:
__match_args__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
def describe(p):
match p:
case Point(0, 0):
return "原点"
case Point(x, 0):
return f"在X轴上,x={x}"
case Point(0, y):
return f"在Y轴上,y={y}"
case Point(x, y):
return f"普通点({x}, {y})"
登录后复制
实际应用场景建议
match-case 特别适合以下场景:
- 解析 API 返回的 JSON 数据结构
- 处理 CLI 或游戏中的命令输入
- 状态机或事件处理器的分发逻辑
- AST(抽象语法树)遍历与处理
注意:不是所有情况都需要用 match。对于简单判断,if-else 更直观。过度复杂的模式可能降低可读性。
基本上就这些。掌握 match-case 的核心在于理解模式如何与数据结构对应,并善用 guard 和 __match_args__ 扩展能力。
以上就是高级Pythonmatch函数自定义模式_自定义模式高级match函数Python的详细内容,更多请关注就爱读【www.jiuaidu.com】。
猜您喜欢
《电竞经理2026》自定义选手教程分享
2026-07-11《电竞经理2026》中的自定义选手是游戏里非常有趣的事情,当你想要某种特质的选手,但其他属性你又不太满意的时候就可以自定义选手,我们可以先来到一个网站,就在主菜单那里,我们需要点击数据库。 电竞经理2026怎么自定义选手 本文内容来源于互联网,如有侵权请联系删除。
失控进化高级武器获取方式
2026-07-03失控进化AK47获取方法,AK47突击步枪、火箭筒、C4定时炸弹”绝对是站在武器链顶端的“硬通货”,不管是游龙各种据点,还是和其他玩家火拼时的硬核输出,这些顶级武器往手里一握,瞬间就有了横着走的底气。今天就把老玩家私藏的获取秘籍扒出来,让你轻松把顶级武器收入囊中! 失控进化高级武器获取方式: 一、军事隧道的红卡房: 红卡房内的军火箱,打开它们出AK47和爆炸物的概率不低,但想进红卡房,绿卡>...
《漫威金刚狼》内置自定义选项 可主动和谐血腥效果
2026-06-22InsomniacGames《漫威金刚狼》将带来前所未有的残酷暴力,但玩家可以自行决定屏幕上显示的血腥程度。在本月的Stateof Play直播活动中,工作室发布了一段实机宣传片,随后确认《漫威金刚狼》将包含丰富的暴力自定义选项。 游戏中有专门的辅助功能设置,通过一套精细的过滤系统来处理血腥画面: 玩家可以完全关闭动态血液飞溅效果,并在游戏过程中禁用断肢效果 过场动画也采用了类似处理方式,通过自定...
《宝可梦Pokopia》DLC新情报曝光:服装自定义系统或将登场
2026-06-19据《宝可梦Pokopia》付费DLC扩展包的数字下载卡图片显示,该游戏即将推出的三部曲扩展内容中,或将引入一项令玩家期待的全新功能——宝可梦服装自定义系统。 《宝可梦Pokopia》的付费DLC于上周的任天堂直面会上正式公布,与此同步上线的还有面向所有玩家的免费更新,后者将新增一片可探索区域并引入水下探索机制。DLC共分为三部分,首弹内容定于2026年8月正式推出。 随着首弹DLC发售日的临近,各...
我的世界怎么设置自定义按键
2026-06-07我的世界设置自定义按键方法:1、点击“Esc”就会出现4个按键;2、点击“设置”这个按键;3、点击“键盘和鼠标”,你就可以在下图右侧窗口如图的位置自定义按键。 详细答案: 1、点击“Esc”就会出现4个按键,如图: 2、点击“设置”这个按键,如图: 3、点击“键盘和鼠标”,你就可以在下图右侧窗口如图的位置自定义按键。 本文内容来源于互联网,如有侵权请联系删除。
如何在vivo浏览器中利用收藏的书签栏执行自定义的JavaScript代码小工具?
2026-06-04在vivo浏览器中可通过书签URL(Bookmarklet)一键执行JavaScript小工具,需以javascript:开头、单行无注释格式编写代码,创建时粘贴至书签网址栏并开启书签栏显示,点击即可在当前页执行,但遇禁止脚本的页面会静默失败。 在vivo浏览器中,通过将JavaScript代码封装为书签URL(Bookmarklet),可实现在任意网页上一键执行小工具功能,比如提取页面所有邮箱、...
如何在米侠浏览器中开启夜间模式并自定义滤镜强度?
2026-06-04直接点击【三横线】→【夜间日照】→选【浅夜模式】或【深夜模式】,再关闭系统深色模式及浏览器“跟随系统”开关,最后通过下拉工具栏、设置页或地址栏指令uc://page/eyeprotect将护眼滤镜调至30%~45%(如38或42.5)即可一次设对。 晚上用米侠浏览器刷网页时屏幕太刺眼,想立刻开启夜间模式并把蓝光过滤调到刚好不发黄又护眼的程度,不用反复试错就能一次设对。 直接打开夜间模式开关 点击浏...
夸克浏览器怎么强行切换默认搜索引擎为无广告纯净版的谷歌搜索_夸克搜索源底层自定义配置替换
2026-06-04可通过五种方法将夸克默认搜索引擎设为无广告纯净谷歌:一、关闭AI搜索增强以解锁谷歌选项;二、地址栏输入“g+关键词”跳转至含nfpr=1&udm=2参数的纯净谷歌页;三、自定义添加含该参数的谷歌搜索引擎并设为默认;四、启用网页智能保护过滤干扰广告;五、用ADB命令重置配置强制恢复谷歌入口。 如果您在使用夸克浏览器时希望将默认搜索引擎强制切换为无广告、纯净排版的谷歌搜索,但发现常规设置中仅显...
