Почему не стоит возвращать None из функции?
Я никогда так не делаю. Но знаю, что это антипаттерн. Почему не рекомендуется возвращать из функции None? Есть ли на это PEP8?
Ответы (2 шт):
Функция может вернуть None, если из переданных параметров невозможно вернуть вычисленное значение.
Но глаавное надо учесть, что эта невозможность вернуть значение не является ошибкой, в противном случае надо вызывать исключение.
Если ссылаться на PEP8, то там можно найти, что запрета на возврат None как такого нет. И даже больше, в разделе рекомендаций указано, что функция должна возвращать None.
Оригинал:
Be consistent in return statements. Either all return statements in a function should return an expression, or none of them should. If any return statement returns an expression, any return statements where no value is returned should explicitly state this as return None, and an explicit return statement should be present at the end of the function (if reachable):
Перевод:
Будьте последовательны в возвращаемых выражениях. Либо все операторы return должны возвращать выражение, либо ни одно из них не должно. Если какой-либо оператор return возращает выражение, тогда остальные операторы return, в которых значение не возвращается должны явно устанавливаться как return None, а явный оператор return должен присутствовать в конце функции:
Пример корректного и не верного применения оттуда же:
# Correct:
def foo(x):
if x >= 0:
return math.sqrt(x)
else:
return None
def bar(x):
if x < 0:
return None
return math.sqrt(x)
# Wrong:
def foo(x):
if x >= 0:
return math.sqrt(x)
def bar(x):
if x < 0:
return
return math.sqrt(x)