Sul comportamento reale, non c'è differenza. Tornano tutti None
e basta. Tuttavia, c'è un tempo e un luogo per tutti questi. Le seguenti istruzioni sono fondamentalmente come dovrebbero essere usati i diversi metodi (o almeno come mi è stato insegnato che dovrebbero essere usati), ma non sono regole assolute, quindi puoi mescolarli se ti senti necessario.
utilizzando return None
Questo dice che la funzione è effettivamente destinata a restituire un valore per un uso successivo, e in questo caso restituisce None
. Questo valore None
può quindi essere utilizzato altrove. return None
non viene mai utilizzato se non ci sono altri valori di ritorno possibili dalla funzione.
Nel seguente esempio, torniamo person
's mother
se la person
data è un essere umano. Se non è un essere umano, torniamo None
dal momento person
che non ha un mother
(supponiamo che non sia un animale o qualcosa del genere).
def get_mother(person):
if is_human(person):
return person.mother
else:
return None
utilizzando return
Questo è usato per lo stesso motivo dei break
loop. Il valore restituito non ha importanza e vuoi solo uscire dall'intera funzione. È estremamente utile in alcuni luoghi, anche se non ne hai bisogno così spesso.
prisoners
Ne abbiamo 15 e sappiamo che uno di loro ha un coltello. Esaminiamo ciascuno prisoner
per uno per verificare se hanno un coltello. Se colpiamo la persona con un coltello, possiamo semplicemente uscire dalla funzione perché sappiamo che c'è solo un coltello e nessun motivo per il resto prisoners
. Se non lo troviamo prisoner
con un coltello, lanciamo un avviso. Questo potrebbe essere fatto in molti modi diversi e l'utilizzo return
probabilmente non è nemmeno il modo migliore, ma è solo un esempio per mostrare come usare return
per uscire da una funzione.
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()
Nota: non dovresti mai farlo var = find_prisoner_with_knife()
, poiché il valore restituito non è pensato per essere catturato.
Non usare return
affatto
Anche questo restituirà None
, ma quel valore non è pensato per essere usato o catturato. Significa semplicemente che la funzione è terminata correttamente. E 'fondamentalmente lo stesso come return
in void
funzioni in linguaggi come C ++ o Java.
Nel seguente esempio, impostiamo il nome della madre della persona e quindi la funzione termina dopo il completamento con esito positivo.
def set_mother(person, mother):
if is_human(person):
person.mother = mother
Nota: non dovresti mai farlo var = set_mother(my_person, my_mother)
, poiché il valore restituito non è pensato per essere catturato.
return None
implica per me che la funzione a volte ha unNone
valore di non ritorno, ma nella posizione direturn None
non esiste tale valore di ritorno. Scrivere noreturn
implica per me non c'è mai un valore di ritorno interessante, un po 'come una "procedura" al contrario di una "funzione".return
implica di esistere presto da una "procedura" come da punto precedente.