我正在开发一个使用大量If, Elif, Elif, ...Else
结构的项目,后来我将其更改为类似 switch 的语句,如此处和此处所示。
If, Elif, Else
我将如何在语句中添加类似于 Else 的一般“嘿,该选项不存在”的情况- 如果没有If
s 或Elif
s 运行,则会执行一些事情?
如果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!
您可以捕获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!'
都会打印在控制台上。
您链接到的第一篇文章有一个非常干净的解决方案:
response_map = {
"this": do_this_with,
"that": do_that_with,
"huh": duh
}
response_map.get( response, prevent_horrible_crash )( data )
这将调用prevent_horrible_crash
ifresponse
不是 中列出的三个选项之一response_map
。
假设您有一个函数 f(a,b) 并根据某个变量 x 的值设置不同的参数。因此,如果 x='Monday' 并且如果 x='Saturday' 您希望使用 a=5 和 b=9 执行 f,则您希望使用 a=1 和 b=3 执行 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 不是在声明切换器时执行,而是在最后一行执行。
一些单行替代方案:
choices = {1:'one', 2:'two'}
key = 3
# returns the provided default value if the key is not in the dictionary
print(choices[key] if key in choices else 'default_value')
# or using the dictionary get() method
print(choices.get(key, 'default_value')