Справочник по Python · модуль 2 · условия
Глава 2.6
Тернарный
условный оператор
Когда условие выбирает одно из двух значений, конструкцию if / else можно записать выражением в одной строке. Такая запись подходит для коротких выражений.
- Категория
- Условные выражения
- Уровень
- Начальный
- Связанные темы
- if, else, присваивание
- Зачем это знать
- Кратко выбирать одно из двух значений
§1От if / else к выражению
Обычная конструкция выбирает, какое значение записать в переменную:
if x > 5: result = "Больше" else: result = "Меньше или равно"
Условное выражение делает тот же выбор в одной строке:
result = "Больше" if x > 5 else "Меньше или равно"
Эту форму часто называют тернарным оператором, потому что в ней участвуют три части: два возможных значения и условие.
§2Порядок частей
значение_если_True if условие else значение_если_False
Чтобы разобрать строку, сначала найдите условие после if. При True выбирается значение слева, при False — значение после else.
- Вычислить условие.
- При
Trueвзять левое значение. - При
Falseвзять правое значение.
§3Пример с текстом
age = 20 message = "Доступ разрешён" if age >= 18 else "Доступ закрыт" print(message)
Доступ разрешён
В переменную message попадает только одна строка. Само условное выражение ничего не печатает.
§4Пример с числами
Выбираться могут не только строки, но и числа.
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()
Условное выражение возвращает значение, поэтому его можно передать функции.
number = 7 print("Чётное" if number % 2 == 0 else "Нечётное")
Короткое сообщение так записывать удобно. Длинное выражение лучше сначала сохранить в переменную с понятным именем.
§6Когда применять
Условное выражение подходит, когда выполняются три условия:
- есть ровно два возможных значения;
- выбор помещается в одну короткую строку;
- в ветках нет отдельных действий, нужен только результат.
| Задача | Подходящая запись |
|---|---|
| выбрать подпись | "Да" if ready else "Нет" |
| выбрать ставку | 0.1 if is_member else 0.2 |
| выполнить несколько команд | обычный if / else |
§7Когда оставить обычный if
Если каждая ветка содержит несколько действий, условное выражение применять не нужно.
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 ready | SyntaxError: отсутствует ветка 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.