python为什么不支持switch语句

阅读: 评论:0

python为什么不支持switch语句

python为什么不支持switch语句

python为什么不支持switch

  • 1. switch是什么
  • 2. Python为什么不支持switch
  • 3. switch-case替代方案
    • 3.1. 示例一:使用if条件判断语句实现
    • 3.2. 示例二:使用字典实现
    • 3.3. 示例三:使用内置getattr()

1. switch是什么

switch语句的语法格式如下:

switch(expression){case value1://语句break; //可选case value2://语句break; //可选default: //可选//语句
}

使用流程图来表示:

它的用法为:switch语句的值满足哪个case的情况,就会执行对应代码块,执行时遇到break就跳出,否则就继续执行下一个case分支。一般会在最后放一个default兜底。
大多数语言都提供了switch语句或者及其相似的东西,比如在C/C++/Java/Go等静态语言中,它们都支持switch-case结构。
switch语句的好处是支持“单条件多分支”的选择结构,相比if-else的二分选择结构,在某些时候会更加简洁清晰。
但是在python中,我们看不到switch-case或者相近的语法结构。

2. Python为什么不支持switch

曾经有人提出过一些提案(PEP-275和PEP-3103),想给python引入switch语法,然而,对于“是否以及如何进行靶场测试”,大家没有达成一致的共识,最终导致提案流产。

3. switch-case替代方案

官方文档中有一篇FAQ给出了几个建议,告诉我们几个switch-case的替代方案:

  • 使用if-elif-else条件判断语句
  • 使用字典。将case值与调用的函数映射起来
  • 使用内置getattr()检索特定的对象调用方法

3.1. 示例一:使用if条件判断语句实现

#判断今天是星期几,打印对应课程
from datetime import datetime
def taskforMath():print("今天上数学课")def taskforChinese():print("今天上语文课")def taskforRest():print("今天休息")def taskforArt():print("今天上美术课")def taskforDance():print("今天上舞蹈课")def taskforDefault():print("输入错误啦。。。。")# 获取今天是星期几,返回int
dayofWeek&#day().weekday()
# ——————————————————使用if-elif-else方式替代switch————————————————————
if dayofWeek==0:taskforMath()
elif dayofWeek==1:taskforChinese()
elif dayofWeek in [2,5,6]:taskforRest()
elif dayofWeek==3:taskforArt()
elif dayofWeek==4:taskforDance()
else:taskforDefault()

3.2. 示例二:使用字典实现

#判断今天是星期几,打印对应课程
from datetime import datetime
def taskforMath():print("今天上数学课")def taskforChinese():print("今天上语文课")def taskforRest():print("今天休息")def taskforArt():print("今天上美术课")def taskforDance():print("今天上舞蹈课")def taskforDefault():print("输入错误啦。。。。")
# 获取今天是星期几,返回int类型
dayofWeek&#day().weekday()# -------------------使用字典方式替代switch,创建星期与课程的映射关系-----------------
dict={"星期一":taskforMath,"星期二":taskforChinese,"星期三":taskforRest,"星期四":taskforArt,"星期五":taskforDance,"星期六":taskforRest,"星期日":taskforRest}
todayis=list(dict.keys())[dayofWeek]
# dict[todayis]() # 这种写法无法在这一步设置默认打印,需要将默认写进dict中
(todayis,taskforDefault)()

3.3. 示例三:使用内置getattr()

#判断今天是星期几,打印对应课程
from datetime import datetime
class A:def taskforMath(self):print("今天上数学课")def taskforChinese(self):print("今天上语文课")def taskforRest(self):print("今天休息")def taskforArt(self):print("今天上美术课")def taskforDance(self):print("今天上舞蹈课")def taskforDefault(self):print("输入错误啦。。。。")# 获取今天是星期几,返回int
dayofWeek&#day().weekday()
a=A()
task=["taskforMath","taskforChinese","taskforRest","taskforArt","taskforDance","taskforRest","taskforRest","taskforDefault"]
getattr(a,task[dayofWeek])()

本文发布于:2024-01-29 10:17:01,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170649462714581.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:不支持   语句   python   switch
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23