7

我正在开发一个使用大量If, Elif, Elif, ...Else结构的项目,后来我将其更改为类似 switch 的语句,如此此处所示。

If, Elif, Else我将如何在语句中添加类似于 Else 的一般“嘿,该选项不存在”的情况- 如果没有Ifs 或Elifs 运行,则会执行一些事情?

4

5 回答 5

9

如果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!
于 2013-03-20T02:48:38.623 回答
7

您可以捕获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!'都会打印在控制台上。

于 2013-03-20T02:29:50.493 回答
2

您链接到的第一篇文章有​​一个非常干净的解决方案:

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

这将调用prevent_horrible_crashifresponse不是 中列出的三个选项之一response_map

于 2013-03-20T02:48:44.190 回答
1

假设您有一个函数 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 不是在声明切换器时执行,而是在最后一行执行。

于 2017-08-24T19:26:17.073 回答
1

一些单行替代方案:

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')
于 2021-10-27T04:23:25.853 回答