Quick answer: Python uses a conditional expression rather than the question-mark syntax found in some languages: value_if_true if condition else value_if_false. Use it for one clear value, and prefer a normal if statement when either branch performs multiple steps or side effects.

Python’s ternary operator is more formally called a conditional expression. It lets you choose between two values in one expression:
value_if_true if condition else value_if_false
Use it when both branches are short and the result is a value. Use a normal if/else block when the logic has multiple statements or needs to be easy to scan.
Python ternary operator syntax
The syntax is different from C, Java, and JavaScript. Python does not use condition ? true_value : false_value. It uses:
result = true_value if condition else false_value
Example:
age = 20
message = "You may vote" if age >= 18 else "You are too young to vote"
print(message)
# You may vote
The official Python conditional expressions documentation defines this expression form in the language reference.
Convert if else to a ternary expression
This normal if/else statement assigns one of two values:
score = 82
if score >= 60:
result = "pass"
else:
result = "fail"
The ternary version is shorter:
score = 82
result = "pass" if score >= 60 else "fail"
Both versions are valid. The ternary version is best when the condition and both results fit comfortably on one line.
Use a ternary expression in return statements
A common use is returning one of two values from a function:
def fee(is_member):
return 5 if is_member else 10
print(fee(True))
# 5
This is clearer than creating a temporary variable when the logic is simple.

Use ternary expressions in f-strings
You can use a conditional expression inside an f-string:
count = 1
print(f"{count} file{'s' if count != 1 else ''} uploaded")
# 1 file uploaded
Keep this pattern short. Long conditions inside f-strings become hard to read quickly.
Nested ternary operator
You can nest ternary expressions, but it is easy to overdo it:
score = 91
grade = "A" if score >= 90 else "B" if score >= 80 else "C"
print(grade)
# A
For readability, use parentheses or a normal if/elif/else block when there are more than two branches:
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
else:
grade = "C"
Ternary operator with lambda
A lambda can contain a conditional expression because the ternary form is an expression:
discount = lambda price: price * 0.9 if price >= 100 else price
print(discount(120))
# 108.0
If the logic grows beyond one condition, define a normal function instead of forcing it into a lambda.

Can Python ternary omit else?
No. A Python conditional expression must include else. This is invalid:
# SyntaxError
value = name if name
If you only want to run an action when a condition is true, use an if statement:
if name:
print(name)
You may see short-circuit expressions such as condition and action(), but they are not a replacement for clear control flow. For more detail, see our guide to short-circuit evaluation in Python.
Avoid tuple and list ternary tricks
Old examples sometimes show this pattern:
result = (false_value, true_value)[condition]
Avoid it. Both values are evaluated before indexing, so it can run expensive code or raise errors from the branch you did not intend to use:
# Raises ZeroDivisionError even though the selected value would be 2
result = (1 / 0, 2)[True]
The real conditional expression evaluates only the selected branch:
result = 2 if True else 1 / 0
print(result)
# 2
Operator precedence
Conditional expressions have low precedence. When combining them with other operations, add parentheses if there is any chance of confusion:
total = price * (0.9 if is_member else 1.0)
The official Python operator precedence table shows where conditional expressions fit among other operators.
Common mistakes
- Using C-style
condition ? a : bsyntax in Python. - Trying to omit the
elsepart. - Nesting several ternary expressions until the code becomes unreadable.
- Using tuple or list indexing tricks that evaluate both branches.
- Using a ternary expression for actions instead of values.

Ternary operator vs inline if
In Python tutorials, “ternary operator,” “inline if,” and “conditional expression” often refer to the same syntax. If you want a broader explanation of one-line if statements versus conditional expressions, read Python inline if. For normal multi-line control flow, the official Python if statement tutorial is the reference.
Conclusion
The Python ternary operator is true_value if condition else false_value. It is best for choosing between two simple values. Keep it short, avoid tuple/list tricks, and switch to a normal if/else block when readability starts to suffer.
Read The Expression In Order
The expression places the true value first, then the condition, then the false value. This order is intentional but can look unfamiliar to readers coming from another language, so avoid overly clever nesting.
Keep Branches Side-Effect Free
A conditional expression is easiest to review when both branches compute a value. Use a normal if statement for logging, mutation, exceptions, or multiple operations so each path can be named and tested.

Avoid Nested Ternaries
Nested conditional expressions can hide precedence and make a result difficult to debug. Replace them with an if/elif/else block or a mapping when the code represents a set of named choices.
Choose Truthiness Deliberately
A condition follows Python truth-value rules, so empty strings, zero, empty collections, and None are false. If the requirement is specifically a None check or a numeric comparison, write that condition explicitly.
Test Both Outcomes
A concise expression still needs tests for true, false, boundary, and unexpected inputs. Keep the output type consistent across branches unless the API explicitly documents a union of types.
A conditional expression should reduce repetition without reducing meaning. If a reviewer must mentally expand several conditions to understand the value, the compact form has stopped helping. Give complex conditions a named variable, prefer a mapping for lookup tables, and keep the branch result types compatible. Python’s conditional expression reference defines the syntax and evaluation order. Related references include default values, testing branches, and clear control flow.
For related control-flow choices, compare keyword arguments, default values, and branch tests when choosing a compact expression.
Frequently Asked Questions
What is the ternary operator in Python?
It is a conditional expression written as value_if_true if condition else value_if_false.
Does Python have a question mark ternary syntax?
No. Python uses the if and else expression form rather than the question-mark colon syntax used by some languages.
Can a Python ternary expression have an else branch?
Yes. Both outcomes are required so the expression always produces a value.
When should I avoid a ternary expression?
Use a normal if statement when branches have side effects, multiple steps, nested conditions, or need independent comments.