Come creare una funzione in python
Nel linguaggio python posso definire una funzione utilizzando l'istruzione def() ossia define.
La definizione della funzione
def nomefunzione(parametri):
blocco istruzioni
return variabile
L'istruzione def è composta dal nome della funzione che voglio creare, dal blocco delle istruzioni da eseguire.
Il blocco istruzioni deve trovarsi più a destra dell'istruzione def per la regola dell'indentazione.
Come usare gli argomenti della funzione
Gli argomenti della funzione sono parametri opzionali passati durante la chiamata
Se gli argomenti sono più di uno, devono essere separati da una vigola.
def nomefunzione(a,b):
Se, invece, non ci sono argomenti, vanno comunque indicate le parentesi tonde senza nulla dentro.
def nomefunzione():
L'istruzione return restituisce uno o più valori al codice chiamante.
Nota. L'istruzione return e i parametri non sono obbligatori per il funzionamento. Una funzione può essere eseguita anche senza. Tuttavia, il più delle volte occorre usare i parametri e l'istruzione return.
Come chiamare la funzione
Una volta creata, posso richiamare ed eseguire la funzione da qualsiasi altra parte dello script tramite la chiamata nomefunzione().
nomefunzione(argomenti)
Tra le parentesi tonde inserisco gli argomenti ( valori, costanti, variabili ) da passare alla funzione.
Il numero degli argomenti della chiamata deve coincidere con il numero degli argomenti della funzione.
Esempio
media( 2 , voto )
Posso chiamare la stessa funzione più volte da punti diversi del programma, cambiando ogni volta gli argomenti.
Un esempio pratico
In questo codice definisco una funzione media all'inizio del codice.
def media(a,b):
c=(a+b)/2
return c
n1=4
n2=6
m=media(n1,n2)
print(m)
Il programma esegue le funzioni soltanto quando sono chiamate.
In questo caso, il programma comincia l'esecuzione con le assegnazioni n1=4 e n2=6.
Nell'assegnazione della variabile m=media(n1,n2) lo script chiama la funzione media() passandogli come parametri i valori n1 e n2.
La funzione riceve i due valori e li salva nelle variabili locali a e b.
Poi calcola e salva la media nella variabile locale c.
Infine, restituisce il valore contenuto nella variabile c tramite l'istruzione return c.
Il valore di ritorno viene salvato nella variabile globale m.
L'output del programma è il seguente:
5.0
E così via.
A cosa serve la funzione
Le funzioni evitano di scrivere più volte le stesse righe di codice in più parti del programma.
Grazie alla funzione posso scrivere una sola volta la routine.
Una volta definita posso richiamare la stessa funzione più volte, ogni volta che mi serve, cambiando soltanto gli argomenti in input.
Le variabili nelle funzioni
Le variabili usate in una funzione sono variabili locali.
Quindi, le variabili locali di una funzione esistono soltanto durante l'esecuzione della funzione e non comunicano con il resto del codice.
Un esempio pratico
Al di fuori della funzione la variabile locale non è definita.
Nota. Se una variabile locale della funzione ha lo stesso nome di un'altra variabile globale dello script, durante l'esecuzione della funzione prevale la variabile locale ( es. n2 ). Qualsiasi modifica a una variabile globale dentro una funzione, la trasforma automaticamente in variabile locale. Pertanto, il valore della variabile globale non cambia.
Il passaggio dei parametri alla funzione
Posso chiamare una funzione elencando le variabili o le costanti dello script principale che voglio passargli.
media(a,b)
media(2,5)
oppure indicando nella chiamata le assegnazioni dei dati alle variabili locali della funzione (es. n1, n2)
media(n1=2,n2=5)
In entrambi i casi i dati sono acquisiti dalla funzione e memorizzati secondo l'ordine in altrettante variabili locali ossia n1 e n2.
- def media(n1,n2):
- m=(n1+n2)/2
- return m
Il numero dei parametri passati alla funzione durante la chiamata deve coincidere con gli argomenti in entrata della funzione indicati nell'istruzione def.
E se non conosco il numero preciso di argomenti?
Questo problema si risolve facilmente con Python, basta aggiungere il simbolo dell'asterisco * prima del nome dell'argomento.
- def prova(*n):
- print(n)
- return
- prova(2,4,5)
La funzione riceve tutti i parametri e li registra in una lista.
(2, 3, 4)
Per passare anche le denominazioni devo usare il doppio asterisco ** prima del nome dell'argomento.
- def prova(**n):
- print(n)
- return
- prova(a=2,b=4,c=5)
In questo caso la funzione riceve tutti i parametri e li registra in un dizionario.
{'a': 2, 'b': 3, 'c': 4}
E così via.