Sul comportamento reale, non c'è differenza. Tornano tutti Nonee 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 Nonepuò quindi essere utilizzato altrove. return Nonenon viene mai utilizzato se non ci sono altri valori di ritorno possibili dalla funzione.
Nel seguente esempio, torniamo person's motherse la persondata è un essere umano. Se non è un essere umano, torniamo Nonedal momento personche 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 breakloop. 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.
prisonersNe abbiamo 15 e sappiamo che uno di loro ha un coltello. Esaminiamo ciascuno prisonerper 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 prisonercon un coltello, lanciamo un avviso. Questo potrebbe essere fatto in molti modi diversi e l'utilizzo returnprobabilmente non è nemmeno il modo migliore, ma è solo un esempio per mostrare come usare returnper 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 returnaffatto
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 returnin voidfunzioni 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 Noneimplica per me che la funzione a volte ha unNonevalore di non ritorno, ma nella posizione direturn Nonenon esiste tale valore di ritorno. Scrivere noreturnimplica per me non c'è mai un valore di ritorno interessante, un po 'come una "procedura" al contrario di una "funzione".returnimplica di esistere presto da una "procedura" come da punto precedente.