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