Ответ 1
По фактическому поведению разницы нет. Все они возвращают 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)
, так как возвращаемое значение не предназначено для перехвата.