Python 语言没有提供传统的 switch 语句,但可以通过字典映射(dict)来模拟分支选择逻辑,这种实现方式将每个 case 作为字典的键,对应的处理函数或值作为字典的值,通过查询键来执行相应操作,相比 if-elif 链,字典模拟的代码更简洁、可读性更高,尤其适用于常量值匹配的场景,利用字典的 get 方法可以方便地处理默认分支,这种方法也有限制:无法直接支持范围匹配或复杂条件判断,且所有 case 的处理函数需预先定义,总体而言,字典模拟是 Python 中实现 switch 语义的惯用技巧,适用于大多数静态分支需求。
刚开始学习编程的时候,你很可能在代码里见过下面这种结构:
一个 switch 语句,后面跟着一个表达式(比如变量 day),然后并列列出几个 case 分支,每个分支对应一个值,执行相应的输出,最后还有一个 default 分支兜底,比如当 day 等于 1 时输出“星期一”,等于 2 时输出“星期二”……如果都不匹配,就输出“未知”。
看到这里你可能会想:switch 代码到底是什么意思?别急,今天我们就彻底把它讲清楚。
switch 是什么?—— 一个“多路选择器”
switch 是一种条件分支语句,它好比一个带多个挡位的开关:根据一个表达式的值,跳转到对应的“挡位”(case)去执行代码,如果所有挡位都不匹配,就执行默认的 default 挡位。
它的核心作用:让“多个固定值比较”的代码写起来更清晰、更高效。
想象一下,你写了一个程序,要根据用户输入的数字 1~7 输出“星期一”到“星期日”,如果使用 if-else 实现,你需要写 7 个
if (x == 1)、
else if (x == 2)…… 代码会变得又长又啰嗦,而 switch 就能将这些并列的条件“打包”成一个简洁、紧凑的结构。
…… 代码会变得又长又啰嗦,而 switch 就能将这些并列的条件“打包”成一个简洁、紧凑的结构。
基本语法(以 Java / C 为例)
一个典型的 switch 语句结构如下:
switch 后面跟一个表达式,表达式的结果通常是整数、字符、字符串(Java 7+)或枚举等类型,接着用大括号括起多个 case 分支,每个 case 后面跟一个常量值和一个冒号,然后是要执行的代码,最后以 break 结束(表示跳出 switch),如果所有 case 都不匹配,则执行 default 分支(可选)。
关键点:
switch 和 if-else 有什么区别?该用哪个?
一句话总结:如果条件只是“这个值等于哪个固定值”,并且有 3 个以上分支,优先用 switch;如果条件是范围判断、组合逻辑,或者分支很少(2~3 个),用 if-else 更灵活。
实际例子:一个简单的菜单程序
在 Python 中,虽然没有原生的 switch 语句,但可以用字典(dict)模拟类似的功能,例如定义一个函数,根据传入的数字 1、2、3、4 分别返回“开始游戏”“加载存档”“设置”“退出”,如果传入其他数字则返回“无效选项”,调用时传入 2,得到输出“加载存档”。
在 JavaScript 中,可以直接使用 switch 语句处理字符串变量,例如定义一个变量 fruit 值为 "apple",在 switch 中根据 fruit 的值输出对应的中文名称,当 fruit 为 "apple" 时输出“苹果”,为 "banana" 时输出“香蕉”,否则输出“未知水果”,运行结果输出“苹果”。
容易踩的坑
case n:而 n 是变量,编译就会报错。
现代语言中的 switch 进化
但无论怎么变,switch 的核心思想不变:按值跳转,化繁为简。
switch 代码的意思是:用一个统一的“开关结构”,把多个固定值比较的并列条件,写成优雅、易读、高效的分支代码,它虽然不是万能的,但在适合的场景下,它能让你少写一堆 if-else,也让阅读代码的人一眼看清所有可能性。
下次看到 switch,不妨把它想象成一个多挡位开关——你要做的只是把“值”拨到对应的挡位,剩下的事交给计算机。
思考题:如果用 switch 写一个“根据成绩等级输出评语”(A: 优秀, B: 良好, C: 及格, D: 不及格),你知道怎么写吗?试试看!

