@Timon293

Как лучше делать return?

Есть ли разница в этих 2 вариантах? Если да, то какой лучше? Конкретно интересует можно ли делать как во втором варианте для каждого if return или лучше делать один, как в первом примере?

def test(a):
    if a == "abc":
        result = True
    elif a == "123":
        result = False

    return result


def test(a):
    if a == "abc":
        return True
    elif a == "123":
        return False
  • Вопрос задан
  • 145 просмотров
Решения вопроса 4
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
В конкретном примере больше ничего не нужно
def test(a):
    return a == "abc"


В общем случае предпочитаю один return, так прямее на мой взгляд.
Ответ написан
Комментировать
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Ну во-первых - у вас немного разная логика функций.
Первая процедура вылетит с ошибкой если передать значение не равное 123 или abc.
result-то вы не проинициализировали...
Вторая - отработает успешно, просто ничего не вернет.
Если они будут задействованы в критической логике программы, - то у вас программа просто в ошибку свалится в первом случае. Во втором случае - не свалится, если возврат значения None предусмотрено дальнейшей программой (только не спутать ее с False)

Во вторых - первая функция компилируется в байткод из 28 команд, а вторая - в 26. Лишнее присваивание дает лишние шаги программы. В одном месте - как минимум - 2 лишних бесполезных байт-кода, в другом, в третьем... И потом этот ничего не делающий байт-код просто греет процессор, внося свою толику в дело глобального потепления и ухудшения экологии на планете в целом... Так что лишний раз подумайте - есть ли особая в этом необходимость...

Ну и в третьих - эти процедуры можно заменить более эффективными. Впрочем, - коллеги уже подсказали какими.
Ответ написан
Комментировать
@kamenyuga
В данном случае никакой разницы. В обоих вариантах код простой, короткий и понятный. Второй покороче, я бы его использовал.

На практике часто смешиваются эти два варианта. Сначала обрабатываешь простые граничные случаи, в них сразу пишешь return True/False/1/0. А потом заводишь нужные переменные, обрабатываешь общий случай с разными ответвлениями и вычислениями, в конце которого уже идет return answer.
Ответ написан
Комментировать
@bbkmzzzz
В данном конкретном случае - лучше второй вариант
def test(a):
    if a == "abc":
        result = True
    elif a == "123":
        result = False
    # если a !=  "abc" и a != "123" будет выброшено исключение, UnboundLocalError, так как result не определен
    return result

def test(a):
    if a == "abc":
        return True
    elif a == "123":
        return False
    # если a !=  "abc" и a != "123" будет возвращено None, как значение при отсутствии или пустом return

Если функция сложная, return - один, значение по умолчанию инициализировано в начале функции, если что-то простое и наглядное, можно и несколько сделать, на мой взгляд
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы