Funzioni che restituiscono valori
Nella sezione precedente abbiamo visto che non è possibile variare il valore di una variabile all’interno di una funzione, neanche se la passiamo come argomento. Al momento di una qualsiasi assegnazione viene creata una nuova variabile che viene distrutta al termine della funzione.
Ma allora come si possono usare le funzioni per lavorare sulle variabili esterne?
Le funzioni sono in grado di restituire dei valori al termine della loro esecuzione, e per farlo si utilizza la clausola return.
Quindi se scriviamo
a = 3
def raddoppia(x):
return x * 2
a = raddoppia(a)
print(a)
Otteniamo
>>>
6
Come possiamo vedere alla fine abbiamo un valore in uscita dalla funzione raddoppia che viene riassegnato alla variabile a.
Infatti da tenere sempre a mente che il valore in uscita da una funzione deve essere sempre immagazzinato in qualche variabile altrimenti andrà perso.
Funzioni come argomenti
Un altro modo di utilizzare le funzioni che restituiscono valori è quello di usarli direttamente come argomenti a loro volta. In questo caso sarà sufficiente scrivere la chiamata alla funzione come argomento di un’altra funzione
Per applicare quello che abbiamo appena detto, vediamo un esempio in cui utilizzaimo un costrutto IF-ELSE per restituire diversi valori a seconda dei casi. Il valore restituito invece di essere assegnato ad una variabile, verrà immediatamente utilizzato come argomento della funzione print().
def maggiore(x,y):
if x >= y:
return x
else:
return y
print(maggiore(4,3))
Se eseguiamo questo codice otteniamo infatti
>>>
4
Nota sulla clausola return
Attenzione ad utilizzare la clausola return all’interno di una funzione, questa ha un funzionamento simile a break per i cicli, cioè quando viene letta l’esecuzione della funzione termina, indipendentemente se dopo ad essa ci sono altre righe di comando all’interno della funzione.
Facciamo un esempio
def foo():
return "Valore restituito"
print("Dopo il return")
print(foo())
Eseguendo il codice sopra si ottiene infatti
>>>
Valore restituito
E non vi è traccia alcuna della stringa “Dopo il return” come ci saremmo aspettati.
⇐ Vai a Lezione 3.3 – Argomenti delle funzioni
Vai a Lezione 3.5 – Commenti e Docstrings ⇒
>>> def raddopia(x):
retrun x*2
SyntaxError: invalid syntax
>>> def raddopia(x):
retrun (x*2)
>>>
retrun vs return, sorry