Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Returning using a shortened if else statement in Python

Tags:

python

I was going through ways of shortening a normal if else statement. One of the formats I found was to change this:

if x == 1:
    print("Yes")
else:
    print("No")

Into this:

print("Yes") if x == 1 else print("No")

Is the code above considered pythonic? Otherwise, what would be a pythonic way of shortening the if else statement?

I also tried using return instead of print. I tried

return total if x == 1 else return half

which resulted in an unreachable statement for the 2nd return. Is there a way of doing it that i'm not able to see?

Finally, I tried to use an else if instead of an else with the code, but that wouldn't work either.

print(total) if x == 1 else print(half) if x == 2

The code above probably looks stupid logic-wise. Am I missing out on the proper format, or is it really not possible to do return and else if with this format?

like image 399
Gab De Jesus Avatar asked Sep 03 '26 10:09

Gab De Jesus


2 Answers

The form

print("Yes") if x == 1 else print("No")

is not generally considered Pythonic, since ... if ... else ... is an expression and you're throwing away the value that the expression produces (always None). You can use print("Yes" if x == 1 else "No") which is Pythonic since the value of the conditional expression is used as the argument to print.

The form

return total if x == 1 else return half

cannot work since return is a statement and must occur at the beginning of a logical line. Instead, use

return total if x == 1 else half

(which is parsed the same as return (total if x == 1 else half)).

The code

 print(total) if x == 1 else print(half) if x == 2

wouldn't work either - the conditional expression is ... if ... else ..., i.e. each if must be paired with an else that follows it; your second if is missing the else clause; you could use

 print(total) if x == 1 else print(half) if x == 2 else print('something else')

Again, this wouldn't be considered very pythonic; but you could use

 print(total if x == 1 else half if x == 2 else 'something else')

not that it would be much better either.


Finally, if you're participating in a code golf

print("Yes" if x == 1 else "No")

can be shortened to

print(('No', 'Yes')[x == 1])

by using the fact that True == 1 and False == 0 and using these to index a tuple.

like image 112

Have you tried to use the ternary in the print itself ?

print("Yes" if x == 1 else "No")
like image 20
Hugal31 Avatar answered Sep 04 '26 23:09

Hugal31



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!