【发布时间】:2018-04-08 04:17:36
【问题描述】:
嗨,假设我想用字典替换一个大的 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])
由于我有多个复杂计算的案例,有没有更好的解决方案?
【问题讨论】:
-
这是默认参数的典型情况。
a3应该有一个默认值,所以当你只需要 1 个参数时,你不必传递 0。 -
或者你可以使用 lambda 表达式而不是依赖被评估的字符串表达式。
标签: python dictionary if-statement