为什么Python中没有switch或者case语句
原创
©著作权归作者所有:来自51CTO博客作者lanxiaofang的原创作品,请联系作者获取转载授权,否则将追究法律责任
可以很容易地通过一系列的 if... elif... elif... else
. 或者字典dict来代替switch case 语句
下面对于switch语句语法有一些建议,但是对于是否以及如何进行范围测试还没有达成共识。
完整的细节和当前状态见 PEP 275。
对于需要从大量可能性中进行选择的情况,可以创建字典将case值映射到要调用的函数。
例如:
def function_1(...):
...
functions = {'a': function_1,
'b': function_2,
'c': self.method_1, ...}
func = functions[value]
func()
对于调用对象上的方法,你可以进一步简化使用getattr()内置检索方法与特定的名称 :
def visit_a(self, ...):
...
...
def dispatch(self, value):
method_name = 'visit_' + str(value)
method = getattr(self, method_name)
method()
建议对方法名使用前缀,如本例中的 visit_。没有这样的前缀,如果值来自不可信的源,攻击者就可以调用对象上的任何方法。
以上内容参考文档:Why isn’t there a switch or case statement in Python?
-------用字典代替switch case default----------------------------------------------------------------------------------------------------------------------------------------------------------------------
用字典代替其他语言的 switch case default 示例
def isSunday():
return 'Sunday'
def isMonday():
return 'Monday'
def isTuesday():
return 'Tuesday'
def isWednesday():
return 'Wednesday'
def isThursday():
return 'Thursday'
def isFriday():
return 'Friday'
def isSaturday():
return 'Saturday'
def defaultday():
return 'UnKnowDay, maybe is only for you'
replaceswitch = {
0: isSunday,
1: isMonday,
2: isTuesday,
3: isWednesday,
4: isThursday,
5: isFriday,
6: isSaturday,
}
days = input("输入数字0-6")
day_name = replaceswitch.get(int(days), defaultday)() # 第二个参数:当输入的内容不是字典中的key时所返回的内容,也就是其他语言中的default
print(day_name)