По фактическому поведению разницы нет. Все они возвращаются 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
подразумевает существование на ранней стадии «процедуры» в соответствии с предыдущим пунктом.