8

我的代码目前看起来像这样:

if option1:
    ...
elif option2:
    ...
elif option3:
    ....

依此类推。虽然我对此并不不满,但我想知道在 python 中是否有更好的选择。我的脚本是一个基于控制台的脚本,我使用 argparser 来获取用户需要的内容。

4

3 回答 3

19

如果“选项”可以包含“一”、“二”或“三”,你可以这样做

def handle_one():
  do_stuff

def handle_two():
  do_stuff

def handle_three():
  do_stuff


{'one': handle_one, 
 'two': handle_two, 
 'three': handle_three}[option]()
于 2013-07-26T12:39:15.443 回答
6

我猜您是在其他地方开始编写具有背景的 Python 脚本,那里的switch语句可以解决您的问题。由于这不是 Python 中的一个选项,因此您正在寻找另一种方式来做事。

但是,如果没有上下文,你就不能很好地回答这个问题(有太多的选择)。

我将提出一个(有点 Pythonic)的替代方案:

让我们从一个我认为你来自哪里的例子开始。

def add_to_x (x):
    if x == 3:
        x += 2
    elif x == 4:
        x += 4
    elif x == 5:
        x += 5
    return x

这是我的选择:

def add_to_x (x):
    vals = { 3 : 5  ,  4 : 8  ,  5 : 10 }
    return vals[x]

您还可以查看可以放入我使用的字典结构的lambda

但是,如前所述,如果没有上下文,这可能不是您要寻找的。

于 2013-07-26T12:45:56.570 回答
3

这是我首先想到的:

而不是这样做:

if option1:
    a = 1
elif oprtion2:
    a = 2
elif oprtion3:
    a = 3
else:
    a = 0

你可以这样做:

a = 1 if option1 else 2 if option 2 else 3 if option3 else 0

有关更多详细信息,请参阅:PEP 308:条件表达式

于 2013-07-26T12:45:35.187 回答