您好,我想用字典替换大型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])
由于我有多个复杂计算案例,有没有更好的解决方案?
答案 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]
答案 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值中使用它。