网站首页 > 技术文章 正文
作者:Kevin
来源:麦叔编程
学过其他编程语言的同学肯定发现了我们Python语言中竟然没有"很常见"的switch/case关键字,更别提对应的语法结构了。既然没有,有些时候又需要用,那只能自己写一个"fake_switch"了。
以Java的switch用法进行参照(摘自菜鸟教程)
public class Test {
public static void main(String args[]){
char grade = 'C';
switch(grade)
{
case 'A' :
System.out.println("优秀");
break;
case 'B' :
case 'C' :
System.out.println("良好");
break;
case 'D' :
System.out.println("及格");
break;
case 'F' :
System.out.println("你需要再努力努力");
break;
default :
System.out.println("未知等级");
}
System.out.println("你的等级是 " + grade);
}
}
用if-elif-else代替
def fake_switch_1(grade:str) -> str:
if grade == "A":
return "优秀"
elif grade == "B" or grade == "C":
return "良好"
elif grade == "D":
return "及格"
elif grade == "F":
return "你需要再努力努力"
else:
return "未知等级"
# 调用显示结果
print(fake_switch_1("A"))
print(fake_switch_1("B"))
print(fake_switch_1("C"))
print(fake_switch_1("D"))
print(fake_switch_1("F"))
print(fake_switch_1("Z"))
运行代码:
优秀
良好
良好
及格
你需要再努力努力
未知等级
用字典(dict)+ try...except...语句代替
def fake_swith_2(grade:str) -> str:
level = {
"A":"优秀",
"B":"良好",
"C":"良好",
"D":"及格",
"F":"你需要再努力努力",
}
try:
g = level[grade]
except Exception:
g = "未知等级"
return g
# 调用显示结果
print(fake_switch_2("A"))
print(fake_switch_2("B"))
print(fake_switch_2("C"))
print(fake_switch_2("D"))
print(fake_switch_2("F"))
print(fake_switch_2("Z"))
运行代码:
优秀
良好
良好
及格
你需要再努力努力
未知等级
match...case...语句(Python3.10以后引入)
这个算是属于python自己的switch/case语句了,其用法基本和其他语言的switch/case语句一样。
def fake_switch_3(grade:str) -> str:
match grade:
case "A":
return "优秀"
case "B":
return "良好"
case "C":
return "良好"
case "D":
return "及格"
case "F":
return "你需要再努力努力"
case _:
return "未知等级"
print(fake_switch_3("A"))
print(fake_switch_3("B"))
print(fake_switch_3("C"))
print(fake_switch_3("D"))
print(fake_switch_3("F"))
print(fake_switch_3("Z"))
运行代码:
优秀
良好
良好
及格
你需要再努力努力
未知等级
最后一段的case _:类似于 C 和 Java 中的default:,当匹配不到字符时就会执行该语句下的表达式。
总结
我自己感觉用Python字典(dict)+ try...except...的形式去实现switch/case的功能会让代码显得更整洁更pythonic。在维护这段代码时只要注重字典(dict)中的键值对和try语句中defult的值,而不用太去关注逻辑判断上是否会出问题,在某种意义上讲,这可能还是超越switch/case的地方。
「小伙伴们,这三种选择结构,你们喜欢哪种呢?请在评论区留言,加上喜欢的原因,那就更好了。」
关于python为什么没有switch/case语句
根据上图表面,前期Python之父Guido是不希望引入switch/case规则的,他曾说“Python is fine without a switch statement”。但十五年后,Guido却引入了match/case规则,难道match/case逃不出真香定律?
猜你喜欢
- 2025-05-05 python unittest 基本用法(python3 unittest)
- 2025-05-05 使用pytest进行单元测试(pytest详解)
- 2025-05-05 用扣子开发一个图灵测试游戏(用扣子开发一个图灵测试游戏的软件)
- 2025-05-05 Python进阶-day19: 测试与调试(python测验)
- 2025-05-05 零起点Python机器学习快速入门-4-3-字符串常用方法
- 2025-05-05 Python + Unittest 之 DDT 的原理解析
- 2025-05-05 shell脚本基本语法(上)看完这个麻麻再也不担心我不会Linux了
- 2025-05-05 软件测试员必看!数据库知识mysql查询语句大全
- 2025-05-05 Python 什么情况下会生成 pyc 文件?
- 2025-05-05 Learn Python If Statements: Basics and Examples for Beginners
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)