Многие начинающие программисты на Python привыкли писать условные операторы с использованием if, elif и else, но с увеличением длины и глубины вложенности кода его читаемость начинает страдать. Python, стремящийся к "читаемому коду", предлагает много способов выразить условные операторы гораздо более изящно и лаконично.

В этой статье я представлю советы и примеры, которые отвлекут от традиционного написания условных операторов и позволят вам обрабатывать условные ветвления более по-питоновски.


1. Условное выражение (Conditional Expression, aka тернарный оператор)

status = "взрослый" if age >= 18 else "несовершеннолетний"
  • Выражение if/else можно записать в одну строку
  • Однако избегайте вложенного использования (это ухудшает читаемость)

2. Использование Truthy / Falsy значений

if items:
    print("В списке есть элементы.")

В Python следующие значения оцениваются как False в условных операторах: - Пустой контейнер ([], {}, '') - Число 0 (0, 0.0) - None

Все остальные значения считаются True, поэтому такой код выполняется.

Новички часто пишут такой код:

if len(items) > 0:
    print("В списке есть элементы.")

Но в Python, если len(items) равно 0, то это False, а 1 или больше — это True, поэтому этот код можно сократить до if items:.

Этот подход позволяет достичь читаемости, лаконичности и питоновского стиля кода. Однако, если слишком много опустить и теряется намерение, полезно добавить комментарии.


3. Уменьшение вложенности с помощью Guard Clause

def process(user):
    if not user.is_active:
        return "Пользователь неактивен."
    # Логика ниже
  • Лучше быстро возвращать или завершать, чем создавать вложенные блоки кода в if
  • Если условие не выполняется, то выходите сразу (early return)

4. Использование словаря для замены условных операторов

def get_status(code):
    return {
        200: "OK",
        404: "Не найдено",
        500: "Ошибка сервера"
    }.get(code, "Неизвестно")
  • Повышение читаемости с помощью dict вместо if-elif
  • Возможность задать значение по умолчанию с помощью .get()

5. Упрощение сложных условий с помощью any() / all()

if any([is_admin, is_staff, is_moderator]):
    grant_access()
  • Если хотя бы одно из условий True → any()
  • Если все условия должны быть True → all()

6. Обработка значений по умолчанию с помощью оператора or

Оператор or в Python возвращает правое значение, если левое оценивается как False. Используя это свойство, можно элегантно задать значение по умолчанию:

username = input("Введите имя: ") or "Имя отсутствует"

Или, если возвращаемое значение функции может быть пустым, можно также естественно задать значение по умолчанию:

items = get_items() or ["Элемент по умолчанию"]

Этот метод позволяет задавать альтернативные значения коротко и интуитивно без условных операторов, что очень удобно.

🔍 При доступе к словарю .get('key', 'default') безопасно проверяет существование ключа и возвращает значение по умолчанию. Однако or более эффективно используется для обработки обычных переменных или возвращаемых значений функций.


7. Шаблонное сопоставление (match-case) - Python 3.10+

def handle_error(code):
    match code:
        case 400:
            return "Плохой запрос"
        case 404:
            return "Не найдено"
        case _:
            return "Неизвестная ошибка"
  • Доступно в Python 3.10 и выше
  • Замена switch-case, поддерживающая деструктуризацию

Заключение

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

Применение приведенных примеров при написании условных операторов поможет вам постепенно создавать более элегантный код.


Tux Zen

Простое лучше сложного. — из The Zen of Python