Тернарное выражение
Тернарное выражение
В предыдущих уроках мы писали if/else в несколько строк. Но очень часто нужно просто присвоить одно из двух значений в зависимости от условия — и для этого писать четыре строки кажется громоздким. Python предлагает лаконичное решение: тернарное выражение (или условное выражение).
Синтаксис
В большинстве языков тернарный оператор пишется как условие ? значение_если_true : значение_если_false. В Python синтаксис другой — намеренно более читаемый:
значение_если_true if условие else значение_если_false
Это выражение (а не оператор!), которое возвращает одно из двух значений.
Простой пример
Классическая задача: присвоить метку в зависимости от числа.
Без тернарного выражения:
age = 20
if age >= 18:
label = "взрослый"
else:
label = "несовершеннолетний"
С тернарным выражением — в одну строку:
age = 20
label = "взрослый" if age >= 18 else "несовершеннолетний"
print(label) # взрослый
Результат абсолютно одинаковый — просто более компактная запись.
Ещё примеры
score = 75
result = "сдал" if score >= 60 else "не сдал"
print(result) # сдал
x = -5
abs_x = x if x >= 0 else -x # собственная реализация abs()
print(abs_x) # 5
n = 4
parity = "чётное" if n % 2 == 0 else "нечётное"
print(parity) # чётное
Тернарное выражение внутри f-строки
Одно из самых частых применений — встроить условную логику прямо в f-строку:
count = 1
print(f"Найден {count} {'товар' if count == 1 else 'товара'}")
# Найден 1 товар
count = 3
print(f"Найдено {count} {'товар' if count == 1 else 'товара'}")
# Найдено 3 товара
Или с числовым форматированием:
balance = -50
status = f"{'Долг' if balance < 0 else 'Остаток'}: {abs(balance)} руб."
print(status) # Долг: 50 руб.
Когда использовать тернарное выражение
Тернарное выражение уместно, когда:
- Условие простое и помещается в одну строку.
- Выбирается одно из двух значений (не выполняются сложные действия).
- Результат сразу используется: присваивается в переменную, передаётся в функцию, вставляется в f-строку.
Тернарное выражение не подходит, если:
- Условие сложное и требует пояснения.
- В каждой ветке нужно выполнить несколько действий.
- Вложенные тернарные выражения — это почти всегда плохая идея.
# Плохо: вложенные тернарные выражения нечитаемы
grade = "A" if score >= 90 else "B" if score >= 80 else "C" if score >= 70 else "F"
# Хорошо: обычный if/elif/else
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"
Три и более вложенных тернарника — верный признак, что нужен обычный if/elif/else.
Тернарное выражение — это выражение, а не оператор
Это принципиальное отличие. Выражение возвращает значение и может находиться в любом месте, где ожидается значение: в правой части присваивания, внутри вызова функции, в f-строке.
# Прямо в вызов функции:
print("чётное" if 10 % 2 == 0 else "нечётное")
# В списке аргументов:
max_val = max(a if a > 0 else 0, b if b > 0 else 0)
# В качестве аргумента другой функции:
items = [1, -2, 3, -4]
positives = [x if x > 0 else 0 for x in items] # list comprehension — изучим в модуле 5
Практический пример
temperature = float(input("Температура: "))
description = (
"жара" if temperature > 35
else "тепло" if temperature > 20
else "прохладно" if temperature > 10
else "холодно"
)
print(description)
Здесь несколько тернарных выражений объединены в цепочку. Для двух-трёх уровней это ещё допустимо (особенно с переносом строк), но на практике лучше использовать if/elif/else.
Проверь себя
Что выведет этот код?
x = 0
result = "не ноль" if x else "ноль"
print(result)
x = 0 — это ложное (falsy) значение в Python. Поэтому if x равно False, и выполняется ветка else: выводится "ноль".
Итог
- Тернарное выражение:
значение_если_true if условие else значение_если_false. - Это выражение, которое возвращает одно из двух значений — можно использовать везде, где ожидается значение.
- Уместно для простой логики «выбрать одно из двух»; удобно в f-строках и списках.
- Не злоупотребляйте: сложные или вложенные тернарные выражения хуже читаются, чем обычный
if/elif/else.
В следующем уроке разберём, какие значения Python считает «истинными» (truthy) и «ложными» (falsy) — это напрямую влияет на поведение условий.