Від фактичної поведінки різниці немає. Вони всі повертаються, 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
такого поверненого значення немає. Писання "ні"return
взагалі не означає, що ми ніколи не цікаво повертаємо значення, ніби "процедура" на відміну від "функції".return
Має на увазі існування на ранніх етапах "процедури" згідно з попереднім пунктом.