Модуль 2 · Условия

Справочник по Python · модуль 2 · условия

Глава 2.6

2.6

Тернарный
условный оператор

Когда условие выбирает одно из двух значений, конструкцию if / else можно записать выражением в одной строке. Такая запись подходит для коротких выражений.

Категория
Условные выражения
Уровень
Начальный
Связанные темы
if, else, присваивание
Зачем это знать
Кратко выбирать одно из двух значений

§1От if / else к выражению

Обычная конструкция выбирает, какое значение записать в переменную:

Pythonчетыре строки
if x > 5:
    result = "Больше"
else:
    result = "Меньше или равно"

Условное выражение делает тот же выбор в одной строке:

Pythonодно выражение
result = "Больше" if x > 5 else "Меньше или равно"

Эту форму часто называют тернарным оператором, потому что в ней участвуют три части: два возможных значения и условие.

§2Порядок частей

Шаблончитайте от условия
значение_если_True if условие else значение_если_False

Чтобы разобрать строку, сначала найдите условие после if. При True выбирается значение слева, при False — значение после else.

  1. Вычислить условие.
  2. При True взять левое значение.
  3. При False взять правое значение.

§3Пример с текстом

main.pyсообщение по возрасту
age = 20
message = "Доступ разрешён" if age >= 18 else "Доступ закрыт"

print(message)
Выводage = 20
Доступ разрешён

В переменную message попадает только одна строка. Само условное выражение ничего не печатает.

§4Пример с числами

Выбираться могут не только строки, но и числа.

main.pyскидка по сумме
total = 6200
discount = 10 if total >= 5000 else 0
final_total = total * (100 - discount) / 100

print(f"Скидка: {discount}%")
print(f"К оплате: {final_total:.2f} руб.")

§5Выражение прямо в print()

Условное выражение возвращает значение, поэтому его можно передать функции.

Pythonвывод без промежуточной переменной
number = 7
print("Чётное" if number % 2 == 0 else "Нечётное")

Короткое сообщение так записывать удобно. Длинное выражение лучше сначала сохранить в переменную с понятным именем.

§6Когда применять

Условное выражение подходит, когда выполняются три условия:

  • есть ровно два возможных значения;
  • выбор помещается в одну короткую строку;
  • в ветках нет отдельных действий, нужен только результат.
ЗадачаПодходящая запись
выбрать подпись"Да" if ready else "Нет"
выбрать ставку0.1 if is_member else 0.2
выполнить несколько командобычный if / else

§7Когда оставить обычный if

Если каждая ветка содержит несколько действий, условное выражение применять не нужно.

Pythonнесколько действий в ветке
if score >= 90:
    grade = "A"
    message = "Отличный результат"
else:
    grade = "B"
    message = "Продолжайте практику"

Вложенные тернарные выражения не используйте: в строке с несколькими if и else трудно проследить порядок выбора.

§8Частые ошибки

Что написаноЧто произойдётКак правильно
result = if x > 5 "Да" else "Нет"SyntaxError: нарушен порядок частейresult = "Да" if x > 5 else "Нет"
"Да" if readySyntaxError: отсутствует ветка else"Да" if ready else "Нет"
print("Да") if ready else print("Нет")код сработает, но действия внутри выражения затрудняют чтениеиспользовать обычный if / else
несколько тернарных выражений в одной строкепорядок выбора трудно проследитьразвернуть в if / elif / else
value = "10" if ready else 0переменная получает разные типы в разных веткахпо возможности выбирать значения одного типа

§9Проверьте себя

Как читается status = "on" if enabled else "off"?

Если enabled истинно, в status записывается "on", иначе — "off".

Обязательна ли часть else?

Да. Условное выражение всегда должно вернуть одно из двух значений.

Когда лучше использовать обычный if?

Когда ветки выполняют действия, содержат несколько строк или когда однострочная запись стала трудной для чтения.

§10Шпаргалка

Шаблонtrue_value if condition else false_value
Текст"Да" if ready else "Нет"
Число10 if total >= 5000 else 0
Ограничениеодно короткое выражение

Итог главы

Тернарный условный оператор выбирает одно из двух значений по схеме значение if условие else другое_значение. Он подходит для короткого присваивания или вывода. Если ветки содержат действия или строка перестала читаться сразу, используйте обычный if / else.

Глава 2.6 · Тернарный условный оператор · Справочник по Python Автор: Макаров Максим Николаевич