if and else with almost equal blocks

Posted on

Question :

In Python, suppose I have a function:

def func(x):
    if x%2 == 0:
        j = x/2
        print(j)
    else:
        j = x
        print(j)

Do not mind the logic of the code, it’s just a simple example.

The blocks of if and else are almost identical. Is there any way to avoid this repetition that, if frequent in code, can make it non-elegant? Something like:

def func(x):
   j = x/2, if x%2 == 0, else j=x
   print(j)

    

Answer :

You’ve almost hit your example. It’s the ternary operator :

def func(x):
    j = x/2 if x % 2 == 0 else x
    print(j)

It is not possible to make a elif , but it is possible to connect more than one ternary operator in series.

for i in range(10):
    j = x/3 if x % 3 == 0 else x/2 if x % 2 == 0 else x
    print(j)

I really do not recommend doing this, though; a ternary operator already hurts slightly the readability of the code if it is not used for something trivial. With more than one on the same line, the code quickly becomes a mess.

    

It could also return the value in one case, and if it does not happen to return the other, working as an if / else.

def func(x):
    if j % 2 == 0:
        return x/2
    return x

    

Instead of assigning the value to J and then displaying it, you could do the following:

def func(x):
    print(x/2 if x%2 == 0 else x)

    

Leave a Reply

Your email address will not be published. Required fields are marked *