Тернарное выражение

Тернарное выражение

В предыдущих уроках мы писали 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) — это напрямую влияет на поведение условий.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике