Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';Python中if/elif语句的替代方案是什么?_Python - Fatal编程技术网

什么';Python中if/elif语句的替代方案是什么?

什么';Python中if/elif语句的替代方案是什么?,python,Python,我的代码当前看起来像这样: if option1: ... elif option2: ... elif option3: .... 诸如此类。虽然我对它并不不满,但我想知道python中是否有更好的替代方案。我的脚本是一个基于控制台的脚本,我使用argparser获取用户需要的内容 如果“选项”可以包含“一”、“二”或“三”,您可以 def handle_one(): do_stuff def handle_two(): do_stuff def hand

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

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

诸如此类。虽然我对它并不不满,但我想知道python中是否有更好的替代方案。我的脚本是一个基于控制台的脚本,我使用argparser获取用户需要的内容

如果“选项”可以包含“一”、“二”或“三”,您可以

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]()

这是我想到的第一件事:

而不是这样做:

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

有关更多详细信息,请参见:

我猜您是在其他地方开始编写Python脚本,在那里使用
开关
语句可以解决您的问题。因为在Python中这不是一个选项,所以您正在寻找另一种方法来做事情

但是,如果没有上下文,你就无法很好地回答这个问题(有太多的选项)

我将加入一个(有点像蟒蛇)备选方案:

def add_to_x (x):
    vals = { 3 : 5  ,  4 : 8  ,  5 : 10 }
    return vals[x]
让我们从一个我认为你来自哪里的例子开始

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]
你也可以把它放进去


但是,如上所述,如果没有上下文,这可能不是您想要的;例如,您可以使用到模型分派的映射。相关阅读:如果表达式(
optionN
)是常量,您可以尝试dict:)@MartijnPieters。我使用它来确定用户选择了哪些参数。如果要解析命令行,请使用内置python库,例如,也可以更好地阅读它们的代码以添加默认值,这将取决于默认选项是否可行/是否合理如果没有作为输入传递怎么办?@dkrynicki如果需要处理未知,可以使用.get(option,some_default_函数)而不是[option]——这将取决于用例,但它可能会隐藏错误。这似乎是字典承担的责任。每个人似乎都在暗示这一点。这当然是一条路要走。非常像蟒蛇。