Parametri¶
Come generalizzare funzioni, come passare valori alle funzioni.
Le funzioni definite dal programmatore sono molto utili per dividere il programma in parti sufficientemente piccole. Ma hanno la possibilità di diventare molto più utili se al nome della funzione aggiungiamo dei parametri. I parametri sono delle variabili, dei nomi scritti tra le parentesi che seguono il nome della funzione. Ai parametri vengono associati degli oggetti quando la funzione stessa viene chiamata.
Riprendiamo il programma successioni. Salviamolo cambiandogli il nome (Menu:
File - Save as
), chiamiamolo successioni02.py
. Aggiustiamo le righe di
intestazione del programma (la data e il titolo). Modifichiamo ora la funzione
triangolari aggiungendo tra le parentesi il nome di una variabile: “n”. Togliamo
anche le prime tre righe in modo da avere:
def triangolari(n):
triangolare=0
for num in range(n):
triangolare+=num
print "%5s" % triangolare
Il codice ritorna ad essere essenziale e pulito. Proviamolo: <F5>
e poi
nella shell di IDLE
:
>>> triangolari()
Traceback (most recent call last):
File "<pyshell#0>", line 1, in -toplevel-
triangolari()
TypeError: triangolari() takes exactly 1 argument (0 given)
Il risultato non è proprio quello che ci aspettavamo! Il messaggio ci segnala
che triangolari
si aspetta di ricevere un argomento mentre non ne ha
ricevuto neanche uno, ciò non gli va bene e Python protesta. In pratica, alla
variabile n
(parametro) che nella definizione della funzione è messa tra
parentesi, non è stato associato nessun oggetto (argomento) e quindi triangolari
non può andare avanti. Come dare un valore al parametro n
? Al momento della
chiamata della funzione, tra le parentesi possiamo inserire degli argomenti e
questi verranno associati ai parametri.
>>> triangolari(5)
0
1
3
6
10
I parametri ci permettono di scrivere procedure più flessibili che utilizzano variabili il cui valore viene definito al momento della chiamata della funzione stessa.
Affrontiamo un altro problema: proviamo a scrivere procedure che calcolino aree e perimetri delle figure piane studiate alle medie. Per iniziare voglio una procedura che, dati base e altezza di un triangolo, ne stampi l’area. Poiché i dati sono 2, avrà bisogno di 2 parametri, e dato che devono contenere la misura della base e la misura dell’altezza conviene chiamarle una “base” e l’altra “altezza” (ma no!). Nota: i nomi delle funzioni e delle variabili devono aver senso per noi, per il computer un nome o l’altro è lo stesso.
Dato che iniziamo un nuovo progetto, creiamo un nuovo file e intestiamolo con i soliti commenti, poi iniziamo a riempirlo con le funzioni necessarie. Ad esempio:
def areatriangoloBH(base, altezza):
print "Area del triangolo"
print "base = %s" % base
print "altezza = %s" % altezza
print "area = %s" % (base*altezza/2.)
Alcune osservazioni:
- Dato che ci sono più modi per calcolare l’area del triangolo, il nome della
funzione contiene quelle due strane lettere:
BH
che indicano base e altezza. - Nell’ultima linea della funzione bisogna prestare attenzione ad un paio di
particolari.
- Pur essendoci un solo elemento da inserire nella stringa, le parentesi sono necessarie pena uno strano errore dovuto a questioni di precedenza degli operatori: “%” viene eseguito prima di “*”.
- dopo il 2 è necessario un punto, perché?
Un’altra “famosa” formula per calcolare l’area del triangolo è quella che parte dai 3 lati: la formula di Erone.
Per chi se l’è dimenticata ecco la famosa formula
dove p
è il semi perimetro e l1
, l2
, l3
sono i tre lati:
Riassumendo
- I parametri sono delle variabili di proprietà delle funzioni.
- Ogni parametro ha un nome che viene deciso quando si definisce la funzione.
- Il contenuto dei parametri si chiama argomento e viene deciso quando viene chiamata la funzione che li contiene.
- I parametri permettono di scrivere funzioni che hanno comportamenti diversi, decisi al momento della chiamata.
- Una funzione può chiamare un’altra funzione, che a sua volta può chiamarne un’altra, e così via.
Prova tu
- Modifica le funzioni copiate da successioni.py in modo che accettino un parametro e cancella quelle divenute superflue.
- Scrivi la funzione che calcola l’area del triangolo con la formula di Erone.
- Prova la precedente funzione finché non dà un errore, quali valori possono dare errore, perché?
- Scrivi le funzioni che calcolano i perimetri dei poligoni che conosci.
- Scrivi le funzioni che calcolano le aree dei quadrilateri notevoli.