Pensare da informatico/Funzioni

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search

Chiamate di funzioni[modifica]

Hai già visto un esempio di chiamata di funzione:

>>> type("32") 
<type 'string'>

Il nome della funzione è type e mostra il tipo di valore della variabile. Il valore della variabile, che è chiamato argomento della funzione, deve essere racchiuso tra parentesi. È comune dire che una funzione "prende" o "accetta" un argomento e "ritorna" o "restituisce" un risultato. Il risultato è detto valore di ritorno.

Invece di stampare il valore di ritorno possiamo assegnarlo ad una variabile:

>>> betty = type("32") 
>>> print betty 
<type 'string'>

Come esempio ulteriore, la funzione id prende un valore o una variabile e ritorna un intero che agisce come un identificatore unico del valore:

>>> id(3) 
134882108 
>>> betty = 3 
>>> id(betty) 
134882108

Ogni valore ha un id unico che rappresenta dove è depositato nella memoria del computer. L'id di una variabile è l'id del valore della variabile cui essa si riferisce.

Conversione di tipo[modifica]

Python fornisce una raccolta di funzioni interne che converte valori da un tipo all'altro. La funzione int prende ogni valore e lo converte, se possibile, in intero. Se la conversione non è possibile mostra un messaggio d'errore:

>>> int("32") 
32 
>>> int("Hello") 
ValueError: invalid literal for int(): Hello

int può anche convertire valori in virgola mobile in interi, ma ricorda che nel farlo tronca (cioè toglie) la parte decimale.

>>> int(3.99999) 
3 
>>> int(-2.3) 
-2

La funzione float converte interi e stringhe in numeri in virgola mobile:

>>> float(32) 
32.0 
>>> float("3.14159") 
3.14159

Infine str converte al tipo stringa:

>>> str(32) 
'32' 
>>> str(3.14149) 
'3.14149'

Può sembrare strano il fatto che Python distingua il valore intero 1 dal corrispondente valore in virgola mobile 1.0. Questi rappresentano effettivamente uno stesso numero ma appartengono a tipi differenti (rispettivamente intero e in virgola mobile) e quindi vengono rappresentati in modo diverso all'interno della memoria del computer.

Forzatura di tipo[modifica]

Per tornare ad un esempio del capitolo precedente (la divisione di minuti per 60), ora che sappiamo convertire i tipi abbiamo un modo ulteriore per gestire la divisione tra interi. Supponiamo di dover calcolare la frazione di ora che è trascorsa: l'espressione più ovvia, minuti/60, lavora con numeri interi, così il risultato è sempre 0 anche se sono trascorsi 59 minuti.

Una delle soluzioni è quella di convertire minuti in virgola mobile e calcolare il risultato della divisione in virgola mobile:

>>> minuti = 59 
>>> float(minuti) / 60.0 
0.983333333333

In alternativa possiamo avvantaggiarci delle regole di conversione automatica dei tipi chiamate forzature di tipo. Nel caso di operatori matematici se uno degli operandi è float, l'altro è automaticamente convertito a float:

>>> minuti = 59 
>>> minuti / 60.0 
0.983333333333

Convertendo il denominatore a valore in virgola mobile forziamo Python a calcolare il risultato di una divisione in virgola mobile.

Funzioni matematiche[modifica]

In matematica hai probabilmente visto funzioni del tipo sin e log, ed hai imparato a calcolare espressioni quali e . Innanzitutto devi calcolare il valore dell'espressione tra parentesi (l'argomento). Nell'esempio è approssimativamente 1.571 e se x vale 10.0, è 0.1.

Poi valuti la funzione stessa tramite calcoli o tabelle. sin di 1.571 è circa 1, e log in base 10 di 0.1 è -1.

Questo processo può essere applicato ripetutamente per valutare espressioni complesse del tipo . In questo caso devi iniziare dall'espressione più interna , calcolando poi il seno con sin, seguito dall'inverso del seno di e dal logaritmo dell'inverso log(x).

Python è provvisto di un modulo matematico che permette di eseguire le più comuni operazioni matematiche. Un modulo è un file che contiene una raccolta di funzioni raggruppate.

Prima di poter usare le funzioni di un modulo dobbiamo dire all'interprete di caricare il modulo in memoria. Questa operazione viene detta "importazione":

>>> import math

Per chiamare una funzione di un modulo dobbiamo specificare il nome del modulo che la contiene e il nome della funzione separati da un punto. Questo formato è chiamato notazione punto.

>>> decibel = math.log10 (17.0)
>>> angolo = 1.5
>>> altezza = math.sin(angolo)

La prima istruzione assegna a decibel il logaritmo di 17 in base 10. È anche disponibile la funzione log che calcola il logaritmo naturale di un numero.

La terza istruzione trova il seno del valore della variabile angolo. sin e le altre funzioni trigonometriche (cos, tan, etc.) accettano argomenti in radianti e non in gradi. Per convertire da gradi in radianti devi dividere per 360 e moltiplicare per 2π. Per esempio, per calcolare il seno di 45 gradi, prima trasforma l'angolo in radianti e poi usa la funzione seno:

>>> gradi = 45
>>> angolo = gradi * 2 * math.pi / 360.0
>>> math.sin(angolo)

La costante pi fa già parte del modulo matematico math.

Se conosci un po' di geometria puoi verificare il risultato confrontandolo con :

>>> math.sqrt(2) / 2.0
0.707106781187