Refactoring is repeated if statements

My code looks like this:

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

      

I was wondering if there is a way to refactor the operators if

in this code.

+3


source to share


4 answers


How about ternary expression + tuple assignment?

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

      



not only does it save you the trouble of evaluating what you are throwing away (assuming you are not interested in side effects), it also saves you re-evaluating the same expression.

+2


source


You can replace this

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

      



from

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

      

+1


source


You can do this (for python 2.5 and up).

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

      

0


source


How about if you clearly state in each of the three possible cases, for example:

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

      

0


source







All Articles