Pensare da informatico/Funzioni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Airon90 (discussione | contributi)
Nuova pagina: {{Pensare da informatico}} == Chiamate di funzioni == Hai già visto un esempio di '''chiamata di funzione''': <source lang="python"> >>> type("32") <type 'string'> </source> Il nom...
(Nessuna differenza)

Versione delle 12:54, 14 feb 2010

Indice del libro

Chiamate di funzioni

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

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

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.