python - 在字典switch语句中模拟'else'

时间:2013-03-20 02:27:38

标签: python switch-statement case if-statement

我正在开发一个项目,该项目使用了大量If, Elif, Elif, ...Else结构,后来我更改为类似交换的语句,如herehere所示。

我如何添加一个通用的“嘿,该选项不存在”的情况类似于If, Elif, Else语句中的Else - 如果没有If s或Elif可以运行吗?

4 个答案:

答案 0 :(得分:8)

如果else真的不是特殊情况,那么为get使用可选参数会不会更好?

>>> choices = {1:'one', 2:'two'}
>>> print choices.get(n, 'too big!')

>>> n = 1
>>> print choices.get(n, 'too big!')
one

>>> n = 5
>>> print choices.get(n, 'too big!')
too big!

答案 1 :(得分:6)

您可以捕获在地图中找不到值时发生的KeyError错误,并返回或处理默认值。例如,使用n = 3这段代码:

if n == 1:
    print 'one'
elif n == 2:
    print 'two'
else:
    print 'too big!'

成为这个:

choices = {1:'one', 2:'two'}
try:
    print choices[n]
except KeyError:
    print 'too big!'

无论哪种方式,'too big!'都会在控制台上打印出来。

答案 2 :(得分:2)

您链接的first article有一个非常干净的解决方案:

response_map = {
    "this": do_this_with,
    "that": do_that_with,
    "huh": duh
}
response_map.get( response, prevent_horrible_crash )( data )

如果prevent_horrible_crash不是response中列出的三个选项之一,则会调用response_map

答案 3 :(得分:0)

假设您根据某个变量x的值有一个函数f(a,b)和不同的参数设置。因此,如果x ='星期一'那么你想用a = 1和b = 3来执行f。如果x ='星期六'你想用a = 5和b = 9来执行f。否则,您将打印出不支持此类x的值。

我愿意

from functools import partial
def f(a,b):
 print("A is %s and B is %s" % (a,b))

def main(x):
 switcher = {
             "Monday": partial(f,a=1, b=3),
             "Saturday": partial(f, a=5, b=9)
            }
 if x not in switcher.keys():
  print("X value not supported")
  return

 switcher[x]()

这种方式f不会在切换器声明时执行,而是在最后一行执行。