Привет, сегодняшняя лекция на тему Тернарный оператор в Python будет не очень большой, но совершенно точно полезной. Изучить тему можно либо в видеоформате с ментором JavaRush университета, либо в более подробной текстовой версии со мной ниже.
"Тернарный" в переводе означает "тройной". Это альтернатива условному оператору if-else, который тебе уже знаком. Тернарный оператор используется только для возврата значения в зависимости от условия. Он не заменяет конструкцию `if-else` во всех случаях. `if-else` — это управляющая конструкция, которая может выполнять множество действий, а тернарный оператор — это выражение, возвращающее результат. Приведем пример. Допустим, какой-то человек решил пойти в кино на фильм с рейтингом 18+. Охранник проверяет его возраст на входе: если он проходит по возрасту — позволяет пройти в зал, если нет — отправляет домой. Создадим класс Man и проверим это с помощью if-else:
class Man:
    def __init__(self, age):
        self.age = age
    
    def get_age(self):
        return self.age
    
    def set_age(self, age):
        self.age = age

# Создаем объект
man = Man(22)

# Проверяем возраст с помощью if-else
if man.get_age() >= 18:
    security_answer = "Все в порядке, проходите!"
else:
    security_answer = "Этот фильм не подходит для вашего возраста!"

print(security_answer)
Вывод в консоль:
Все в порядке, проходите!
Если убрать вывод в консоль, наша проверка выглядит следующим образом:
if man.get_age() >= 18:
    security_answer = "Все в порядке, проходите!"
else:
    security_answer = "Этот фильм не подходит для вашего возраста!"
Здесь, по сути, работает простая логика: проверяется одно условие (возраст >= 18). В зависимости от этого в переменную security_answer присваивается одна из двух строк с ответом охранника. Такие ситуации, "одно условие — два возможных результата", встречаются в программировании очень часто. Поэтому для них создали тот самый тернарный оператор. С его помощью мы можем упростить нашу проверку до одной строки кода:
man = Man(22)

security_answer = "Все в порядке, проходите!" if man.get_age() >= 18 else "Этот фильм не подходит для вашего возраста!"

print(security_answer)
Так и выглядит работа тернарного оператора в Python. Тернарным (тройным) его называют потому, что в его работе принимают участие 3 компонента: 1. Одно условие (man.get_age() >= 18) 2. Два возможных результата ("Все в порядке, проходите!" и "Этот фильм не подходит для вашего возраста!")

Синтаксис тернарного оператора в Python

В Python тернарный оператор имеет следующий синтаксис:
результат_если_true if условие else результат_если_false
Обрати внимание: в Python синтаксис отличается от многих других языков программирования. Здесь сначала указывается результат для случая True, затем условие, и в конце результат для случая False. Разберем наш пример по частям:
security_answer = "Все в порядке, проходите!" if man.get_age() >= 18 else "Этот фильм не подходит для вашего возраста!"
  • "Все в порядке, проходите!" — результат, если условие истинно (True)
  • man.get_age() >= 18 — условие для проверки
  • "Этот фильм не подходит для вашего возраста!" — результат, если условие ложно (False)

Еще примеры использования

Вот несколько полезных примеров тернарного оператора:
# Определение четности числа
number = 42
result = "четное" if number % 2 == 0 else "нечетное"
print(f"Число {number} - {result}")

# Выбор максимального значения
a, b = 10, 20
max_value = a if a > b else b
print(f"Максимальное значение: {max_value}")

# Проверка на пустую строку
name = ""
greeting = f"Привет, {name}!" if name else "Привет, незнакомец!"
print(greeting)

Что использовать: if-else или тернарный оператор?

С точки зрения производительности особой разницы нет. Но важно понимать: тернарный оператор используется, когда тебе нужно получить значение, а if-else - когда ты хочешь выполнить один из блоков кода (возможно, с побочными эффектами, например, вызовами функций, логированием, и т.д.). Таким образом, выбор зависит не только от читаемости, но и от цели: ты хочешь вернуть значение или выполнить действия? Общая рекомендация: если условие простое и легко проверяется, можно без ущерба использовать тернарный оператор. Таким образом ты сократишь объем кода. А вот если условие является сложным и многоступенчатым — лучше использовать if-else. Например, в этом случае использовать тернарный оператор будет плохой идеей:
# Плохой пример - слишком сложное условие
security_answer = "Проходите!" if (man.get_age() >= 18 and 
                                  (man.has_ticket() or man.has_coupon()) and 
                                  not man.has_child()) else "Вы не можете пройти!"
Так сходу и не поймешь, что тут происходит! Код стал очень сложным для чтения. А все из-за сложного условия:
  • Если человеку больше или равно 18 лет + у него есть билет (или у него есть купон на бесплатное посещение) + с ним нет маленьких детей - тогда он может пройти
  • Если хотя бы одна из частей условия возвращает False — тогда не может
Вот здесь явно лучше бы подошло использование if-else:
# Хороший пример - читаемый код
if (man.get_age() >= 18 and 
    (man.has_ticket() or man.has_coupon()) and 
    not man.has_child()):
    security_answer = "Проходите!"
else:
    security_answer = "Вы не можете пройти!"
Да, наш код стал побольше в размерах, но он в разы более читаемый!

Вложенные тернарные операторы

Технически в Python можно создавать вложенные тернарные операторы, но это быстро делает код нечитаемым:
# Плохой пример - избегайте таких конструкций
grade = 85
result = "отлично" if grade >= 90 else "хорошо" if grade >= 80 else "удовлетворительно" if grade >= 60 else "неудовлетворительно"
Лучше использовать обычные if-elif-else:
# Хороший пример
grade = 85
if grade >= 90:
    result = "отлично"
elif grade >= 80:
    result = "хорошо"
elif grade >= 60:
    result = "удовлетворительно"
else:
    result = "неудовлетворительно"
Тернарный оператор — мощный инструмент для написания краткого и выразительного кода. Используй его разумно, и твой Python-код станет более элегантным!