我正在开发一个项目,该项目使用了大量If, Elif, Elif, ...Else
结构,后来我更改为类似交换的语句,如here和here所示。
我如何添加一个通用的“嘿,该选项不存在”的情况类似于If, Elif, Else
语句中的Else - 如果没有If
s或Elif
可以运行吗?
答案 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不会在切换器声明时执行,而是在最后一行执行。