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

【Python 语法糖小火锅 · 第 5 涮 · 完结】

一、糖味一句话

Python 3.10+ 的 match-case 把「类型 + 值 + 嵌套」一次性拆开,
可读性 ×10,bug 数 ÷10,if-elif 可以安心退休了。


二、1 行示例 3 连发

# ① 值匹配
match status:case 200: msg = "ok"case 404: msg = "not found"case _:   msg = "unknown"# ② 结构匹配 + 守卫
match data:case {"name": str(n), "age": int(a)} if a >= 18:print(f"Adult {n}")case {"name": n}:           # 只关心 key,不关心类型print(f"Minor {n}")# ③ 序列匹配带星号
match cmd:case ["copy", src, dst]:shutil.copy(src, dst)case ["move", *files, dst]:for f in files: shutil.move(f, dst)

三、真实场景:JSON API 响应秒解析

需求:根据返回体结构做不同处理。

import requests, sysresp = requests.get(sys.argv[1]).json()match resp:case {"status": "ok", "data": list(items)}:print("Got", len(items), "items")case {"status": "error", "message": str(msg)}:print("Error:", msg)case _:print("Unknown format")

无需层层 if "status" in resp and isinstance(...)


四、防踩坑小贴士

  1. match 从上到下短路匹配,顺序即优先级。
  2. _ 作通配符,但别把它当变量再用,会覆盖。
  3. 模式里的变量名会绑定到作用域,注意命名冲突。
  4. 低于 3.10 的环境无法使用,需回退到 if-elif。

记忆口令 :“match 拆结构,case 当分支;下划线兜底,守卫加条件。”

http://www.lryc.cn/news/615087.html

相关文章:

  • java练习题:数字位数
  • 【Java基础】字符串不可变性、string的intern原理
  • C++11 ---- 线程库
  • 3.2Vue Router路由导航
  • B.10.01.3-性能优化实战:从JVM到数据库的全链路优化
  • 区块链密码学简介
  • (LeetCode 每日一题) 231. 2 的幂 (位运算)
  • 基于clodop和Chrome原生打印的标签实现方法与性能对比
  • 通过 SCP 和 LXD 配置迁移 CUDA 环境至共享(笔记)
  • 数据标准化与归一化的区别与应用场景
  • FAN5622SX 四通道六通道电流吸收线性LED驱动器,单线数字接口 数字式调光, 2.7 → 5.5 V 直流直流输入, 30mA输出FAN5622S
  • C++ unordered_map 和 unordered_set 的使用
  • 新手向:Python开发简易待办事项应用
  • 【JS-8-Json】深入理解JSON语法及Java中的JSON操作
  • Visual Studio Code (v1.103) 中 GitHub Copilot 最新更新!
  • [TryHackMe]Challenges---Game Zone游戏区
  • 避不开的数据拷贝(2)
  • 第二十天:数论度量
  • 【面试场景题】通过LinkedHashMap来实现LRU与LFU
  • C++隐式转换的魔法与陷阱:explicit关键字的救赎
  • 软件工程总体设计:从抽象到具体的系统构建之道
  • Python基础教程(六)条件判断:引爆思维Python条件判断的九层境界
  • 轻量化阅读应用实践:21MB无广告电子书阅读器测评
  • MySQL(188)如何使用MySQL的慢查询工具?
  • Spring Boot 2 集成 Redis 集群详解
  • 聊聊经常用的微服务
  • MBR分区nvme固态硬盘安装win7--非UEFI启动和GPT分区
  • day30-HTTP
  • 大语言模型提示工程与应用:LLMs文本生成与数据标注实践
  • 在Docker中下载RabbitMQ(详细讲解参数)