elif使用字典但没有超出值

时间:2017-10-26 17:12:31

标签: python dictionary if-statement

您好,我想用字典替换大型el-ifs语句。 简化版本如下:

def functionA(a1, a2, a3):

    results = {
        'case1': a2/a3,
        'case2': 1,
        ...
    }
    return results[a1]

所以a1将是一个字符串('case1'或'case2'或......)问题在某些情况下a3它可能是0所以结果字典无法定义(在所有这些情况下a1不会是'情况1')。例如:

functionA('case2', 1.0, 3.0)
Out[81]: 1
functionA('case2', 1.0, 0.0)
ZeroDivisionError: integer division or modulo by zero

所以在第二种情况下,我预期为1,但我收到了错误。

可能的解决方案是:

def functionA(a1, a2, a3):
    results = {
        'case1': str(a2) + '/' + str(a3),
        'case2': str(1),
    }

    return eval(results[a1])

由于我有多个复杂计算案例,有没有更好的解决方案?

3 个答案:

答案 0 :(得分:4)

def functionA(a1, a2, a3):
    results = {
        'case1': a2 / a3 if a3 != 0.0 else a2,
        'case2': 1,
        # ...
    }
    return results[a1]

但是,我建议不要采用这种方法,因为必须首先计算整个字典才能获得单个值。

相反,如果你真的想使用字典并且它也有效,我建议:

myproc = {
    'case1': lambda a2, a3: a2 / a3 if a3 != 0.0 else a2,
    'case2': lambda a2, a3: 1
}

然后:

>>> myproc['case1'](2, 3)
0.6666666666666666

答案 1 :(得分:1)

您可以在词典中使用三元运算符

def functionA(a1, a2, a3):

    results = {
        'case1': a2 if a3==0 else a2/a3,
        'case2': 1
    }
    return results[a1]

链接:https://repl.it/NRkd

答案 2 :(得分:0)

如果它只是一个值,你可以用一个简单的if-else来做。

def functionA(a1, a2, a3):

     if a3:
        case1_value = a2/a3
     else: 
        case1_value = a2

    results = {
        'case1': case1_value,
        'case2': 1,
        ...
    }
    return results[a1]

或者使用这个if-else条件创建一个dvision函数,并在你的dict值中使用它。