Skip to main content

Shorthand and One-Line If-Elif-Else Statements in Python

Python offers concise ways to express conditional logic using shorthand if-else statements (ternary operator) and one-line if-elif-else structures using nested ternary operators.

This guide explores these techniques, balancing code brevity with readability.

Shorthand If-Else Statements (Ternary Operator)

The ternary operator in Python provides a compact way to express conditional logic, ideal for simple if-else conditions where the result can be calculated easily without multiple lines of code.

Basic Syntax

The syntax is as follows: value_if_true if condition else value_if_false

variable1 = 50
variable2 = 100

result = 5 if variable1 > variable2 else 10
print(result) # Output: 10

Here's the equivalent if-else statement:

variable1 = 50
variable2 = 100

if variable1 > variable2:
result = 5
else:
result = 10
print(result) # Output: 10
  • The ternary operator makes the code concise, however, the if-else is generally easier to read.

You can directly include the ternary operator within a print() call or assign the result to a variable.

# Direct use in print()
print('hello' if len('hi') == 2 else 'bye') # Output: hello

# Assigning to a variable
result = 'hello' if len('hi') == 2 else 'bye'
print(result) # Output: hello

# Handling None values (example)
name = None
result = 'tom nolan' if not name else name
print(result) # Output: tom nolan

One-Line If-Elif-Else Statements (Nested Ternary Operator)

You can nest ternary operators to create one-line if-elif-else statements, but exercise caution as excessive nesting can hinder readability.

my_str = 'tom nolan'

result = ("Anonymous" if not my_str else my_str.upper()
if len(my_str) > 2 else my_str.capitalize())

print(result) # Output: TOM NOLAN
  • The outer ternary operator checks if my_str is empty and returns "Anonymous" if so.
  • If my_str is not empty, the nested inner ternary operator checks if its length is greater than 2.
  • If the length is greater than 2 the uppercase string is returned using my_str.upper().
  • Otherwise, the string is capitalized using my_str.capitalize().
  • You can use parentheses to format nested ternary operators for better readability.

Here's the equivalent using if-elif-else:

my_str = 'tom nolan'

if not my_str:
result = "Anonymous"
elif len(my_str) > 2:
result = my_str.upper()
else:
result = my_str.capitalize()
print(result) # Output: TOM NOLAN

Here's another example using nested ternaries:

my_num = 50
result = (10 if my_num > 100 else
20 if my_num < 100 else 0)
print(result) # Output: 20

my_num = 50
result = ('a' if my_num > 100 else
('b' if my_num < 100 else 'c'))
print(result) # Output: b

Readability Considerations

note

While nested ternary operators offer conciseness, they can quickly become difficult to understand, especially with complex conditions. Use them judiciously, prioritizing readability over extreme brevity. If the logic is complex use a full if-elif-else statement instead for improved clarity.