重构如果声明重复

时间:2015-05-28 09:48:50

标签: python if-statement refactoring

我的代码如下所示:

var1 = do_something_1()
if param == 'A':
    var1 = do_something_A_1()

var2 = do_something_2(var1)
if param == 'B':
    var2 = do_something_B_1()

var3 = do_something_3(var2)
if param == 'A':
    var3 = do_something_A_2()

var4 = do_something_4(var3)
if param == 'A':
    var4 = do_something_A_3()

我想知道是否有办法重构此代码中的if语句。

4 个答案:

答案 0 :(得分:2)

三元表达+元组赋值怎么样?

var1, var2, var3, var4, var5 = \
    (do_something_1(), do_something_2(), do_something_3(), do_something_4(), do_something_5()) if param == 'A' 
    else \ 
    (do_something_A_1(), do_something_A_2(), do_something_A_3(), do_something_A_4(), do_something_A_5())

它不仅可以帮助您评估您将要扔掉的东西(假设您对副作用不感兴趣),它还可以帮助您重新评估相同的表达方式。

答案 1 :(得分:1)

您可以替换此

var1 = do_something_1()
if param == 'A':
    var1 = do_something_A_1()

var1 =  do_something_A_1() if param == 'A' else do_something_1()

答案 2 :(得分:0)

你可以这样做(对于python 2.5及更高版本)。

var1 = do_something_A_1() if param == 'A'

答案 3 :(得分:0)

如果你清楚地说明三种可能的情况,那就怎么样:

def func(param):
    """
    :param 'A' or 'B' or 'C'
    """
    if param == 'A':
        var1 = do_something_1()
        var1 = do_something_A_1()
        var2 = do_something_2(var1)
        var3 = do_something_3(var2)
        var3 = do_something_A_2()
        var4 = do_something_4(var3)
        var4 = do_something_A_3()
        var5 = do_something_5(var4)

    elif param == 'B':
        var1 = do_something_1()
        var2 = do_something_2(var1)
        var2 = do_something_B_1()
        var3 = do_something_3(var2)
        var4 = do_something_4(var3)
        var5 = do_something_5(var4)

    elif param == 'C':
        var1 = do_something_1()
        var2 = do_something_2(var1)
        var3 = do_something_3(var2)
        var4 = do_something_4(var3)
        var5 = do_something_5(var4)

    return var5