Se trovi utile il mio blog sostienimi con una piccola donazione. GRAZIE

8 – Definire le funzioni

INDICE ARTICOLI

Python supporta le funzioni come quasi tutti i linguaggi di programmazione, ma in modo più semplice.

Il Python infatti non ha la necessita di file header separati come in C++ o sezioni di interfaccia/implementazione come nel Pascal ma, quando si ha bisogno di implementare una funzione, basta dichiararla e definirla.

def miafunzione(parametri):

L’utilità delle funzioni è fondamentale per evitare di ripetere molte volte le stesse righe di codice .

In pratica una funzione definisce un blocco di istruzioni che svolge una o più operazioni più o meno complesse e fa in modo che questo blocco sia riutilizabile richiamando la funzione quante volte si vuole all’interno del nostro programma , comodo no!.

Ad esempio se si volesse creare una funzione che restituisca il valore assoluto di un numero scriveremo qualcosa del genere :

def my_abs(num):
    if num < 0:
        num = -num
    return num

L’istruzione chiave per la definizione di una funzione è def.
L’istruzione def è seguita dal nome della funzione my_abs e poi tra le parentesi tonde troviamo il parametro num che viene passato alla funzione ogni volta che questa viene richiamata dal programma principale.
Le istruzioni dopo il : vengono eseguite ogni volta che la funzione viene richiamata e si possono distinguere dalle normali righe di codice perché sono indentate sotto la funzione.
Quando l’indentazione torna al livello della funzione o quando viene incontra l’istruzione return la funzione termina.
L’istruzione return ritorna il valore assunto dalla variabile num nel punto in cui è chiamata nella funzione.
Ovviamente una funzione non necessariamente deve ricevere o restituire un valore o parametro.

Quando definite una funzione è sempre buona norma documentarla tramite una doc string.

def mia_funzione(params):
    """Stringa di documentazione della funzione.
    Ultima riga di documentazione"""

Ogni cosa in mezzo alle triple virgolette rappresenta la doc string, della funzione, essa documenta ciò che la funzione è in grado di fare.
Una doc string, se esiste, deve essere la prima cosa definita in una funzione .
Ci sono degli strumenti di sviluppo che usano le docstring per produrre automaticamente documentazione stampata, o per permettere all’utente una navigazione interattiva attraverso il codice.
È quindi buona abitudine includere le docstring nel proprio codice per facilitarci le future operazioni di manutenzione del codice stesso.
Quando viene definita una funzione , a differenza di molti altri linguaggi, non è necessario definire che tipo di parametro verrà passato, ovvero non verrà dichiarato il tipo (stringa, carattere, intero etc.) perchè la gestione del tipo verrà eseguita automaticamente dal Python.
Per quanto prima scitto potremo avere una funzione come quella sotto :

def Stampa2Volte(Valore):
     print Valore, Valore

Quando chiameremo la funzione potremo passare il tipo di argomento che vorremo ottenendo quello vi riporto di seguito :

>>>Stampa2Volte(’Pippo’)
Pippo Pippo
>>>Stampa2Volte(5)
5 5
>>>Stampa2Volte(3.14159)
3.14159 3.14159

Nella prima chiamata abbiamo passato una stringa, nella seconda un’intero e nella terza un numero in virgola mobile.
E’ da notare che come argomento alla funzione possiamo passare anche qualsiasi espressione valida come sotto :

>>> Stampa2Volte("Pippo"*4)
PippoPippoPippoPippo PippoPippoPippoPippo
>>> Stampa2Volte(math.cos(math.pi))-1.0 -1.0

Come potete vedere il linguaggio Python è decisamente potente e semplice , se avessimo dovuto fare la stessa cosa con altri linguaggi come ad esempio il Pascal sarebbe stato decisamente più complicato.
Quando definiamo una variabile all’interno di una funzione questa è di tipo locale, questo significa che è visibile solo dall’interno della funzione e non vine resa disponibile al resto del programma.
Cosa a cui si deve porre attenzione è che se in una funzione viene creata una variabile locale con lo stesso nome di una variabile globale nella funzione sarà visibile solo quella locale.

Dall’interno di una funzione possiamo richiamare un’altra funzione ma in Python possiamo fare di più , ovvero possiamo implementare una funzione che richiama se stessa (programmazione ricorsiva).
Diciamo che non è immediatamente ovvio il perchè sia utile fare in modo che una funzione richiami se stessa quindi ecco un semplice esempio :

def ContoAllaRovescia(n):
    if n == 0:
        print "Partenza!"
    else:
        print n
        ContoAllaRovescia(n-1)

Cosa succede quando chiamiamo una funzione come questa?

>>> ContoAllaRovescia(3)

L’esecuzione di ContoAllaRovescia inizia con n=3.
Dato che n non è 0, essa stampa il valore 3, e poi richiama se stessa…

L’esecuzione di ContoAllaRovescia inizia con n=2. Dato che n non è 0, stampa il valore 2,
e poi richiama se stessa…

L’esecuzione di ContoAllaRovescia inizia con n=1.
Dato che n non è 0, essa stampa il valore 1, poi richiama se stessa…

L’esecuzione di ContoAllaRovescia inizia con il
valore di n=0. Dal momento che n è 0, essa stampa
il testo “Partenza!” e poi ritorna.

La funzione ContoAllaRovescia che aveva n=1; e poi ri-
torna.

La funzione ContoAllaRovescia che aveva n=2; e poi ritorna.

E quindi torna alla funzione
main

Il risultato sarà questo:

3
2
1
Partenza!

INDICE ARTICOLI