По фактическому поведению разницы нет. Все они возвращаются Noneи все. Тем не менее, есть время и место для всего этого. Следующие инструкции в основном показывают, как следует использовать различные методы (или, по крайней мере, как меня учили, что их следует использовать), но они не являются абсолютными правилами, поэтому вы можете смешивать их, если считаете нужным.
С помощью return None
Это говорит о том, что функция действительно предназначена для возврата значения для последующего использования, и в этом случае она возвращает None. Это значение Noneзатем может быть использовано в другом месте. return Noneникогда не используется, если нет других возможных возвращаемых значений из функции.
В следующем примере мы возвращаем person, motherесли personданное является человеком. Если это не человек, мы возвращаемся, Noneпоскольку у personнего нет mother(предположим, это не животное или что-то в этом роде).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
С помощью return
Это используется по той же причине, что и breakв циклах. Возвращаемое значение не имеет значения, и вы хотите выйти только из всей функции. Это очень полезно в некоторых местах, хотя вам это не нужно часто.
У нас 15 prisonersи мы знаем, что у одного из них есть нож. Мы перебираем каждого prisonerпо одному, чтобы проверить, есть ли у них нож. Если мы ударим человека ножом, мы можем просто выйти из функции, потому что мы знаем, что есть только один нож, и нет причины проверять остальную часть prisoners. Если мы не найдем prisonerножа, мы выдадим предупреждение. Это может быть сделано разными способами, и использование return, вероятно, даже не лучший способ, но это просто пример, показывающий, как использовать returnдля выхода из функции.
def find_prisoner_with_knife(prisoners):
for prisoner in prisoners:
if "knife" in prisoner.items:
prisoner.move_to_inquisition()
return # no need to check rest of the prisoners nor raise an alert
raise_alert()
Примечание. Никогда не следует этого делать var = find_prisoner_with_knife(), поскольку возвращаемое значение не предназначено для перехвата.
Использование нет returnвообще
Это также вернет None, но это значение не предназначено для использования или перехвата. Это просто означает, что функция завершилась успешно. В основном это то же самое, что и returnв voidфункциях таких языков, как C ++ или Java.
В следующем примере мы устанавливаем имя матери человека, а затем функция завершается после успешного завершения.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Примечание. Никогда не следует этого делать var = set_mother(my_person, my_mother), поскольку возвращаемое значение не предназначено для перехвата.
return Noneдля меня это означает, что функция иногда имеетNoneневозвратное значение, но в местеreturn None, где нет такого возвращаемого значения. Запись noreturnвообще подразумевает, что здесь никогда не бывает интересного возвращаемого значения, вроде «процедуры», а не «функции».returnподразумевает существование на ранней стадии «процедуры» в соответствии с предыдущим пунктом.