Я не люблю else, когда обе ветки содержат return. Всегда можно написать код без этого придатка для if. Такой код будет компактнее, проще читаться и лучше выглядеть. Так зачем же многие пишут этот никчёмный else?

Делая ревью кода одного из коллег, я указал на то, что его код можно упростить, убрав else. Ответом была ссылка на PEP8, где такое поведение определяется допустимым. Код был примерно таким:

def get_magic_number(use_magic):
    if use_magic:
        return calculate_with_magic()
    else:
        return calculate_with_science()

С точки зрения работоспособности этому коду нечего предъявить. Меня, как читателя, такой код заставляет остановиться и задуматься:

  • Что возвращает эта функция?
  • Всегда ли я выхожу из любой ветки?

Даже на таких коротких функциях я останавливаюсь и думаю, всё ли с ними хорошо. А ведь такими короткими обе ветки бывают не всегда.

У меня всегда возникает вопрос, почему нельзя отказаться от else? Плюсы, мне кажется, очевидны:

  • Избавимся от одной ненужной строки.
  • Уберём один отступ для одной из веток.
  • Получим дефолтный return для функции.
def get_magic_number(use_magic):
    if use_magic:
        return calculate_with_magic()
    return calculate_with_science()

Будет ли код читаться лучше? Да. Будет ли какая‑нибудь разница для интерпретатора? Нет. Зачем тогда использовать бессмысленную конструкцию там, где она не нужна? PEP8, как и фраза «потом может понадобиться», не являются весомыми аргументами в пользу else.