Note sui tipi di dati

Sommario
La funzione type(oggetto) restituisce il tipo dell'oggetto passato come argomento. In Python è bene pensare a qualsiasi cosa elaborabile dal programma come ad un oggetto.

Anche un semplice numero come 150 non è solo un valore, ma un oggetto (di tipo numerico), una qualsiasi stringa, anche di lunghezza zero (stringa nulla), è un oggetto complesso (di tipo stringa), dotato di molti metodi interni (metodi di stringa).

Python è totalmente orientato agli oggetti, pur gestendoli in un modo talmente semplice per il programmatore, che all'inizio questi si possono anche ignorare. Sono quindi oggetti anche i tipi di dati più complessi (liste, tuple, dizionari), le istanze di classe (già definite o scritte dal programmatore), e addirittura le funzioni stesse.

In Python l'equivalente di subroutine / procedure / funzioni degli altri linguaggi sono sempre e comunque funzioni, che possono o meno accettare argomenti e possono o meno restituire dei valori (oggetti), ma i nomi stessi delle funzioni sono solo identificatori dell'oggetto funzione, che pertanto può anche essere passato come argomento ad altre funzioni, come un qualsiasi altro tipo di oggetto.

Questo uso assolutamente omogeneo di qualsiasi tipo di oggetto (numeri, stringhe, strutture dati, istanze di classe e funzioni), unito alla non necessità di dover dichiarare esplicitamente i tipi o gestire allocazioni/deallocazioni di memoria o gestire i puntatori (tipizzazione dinamica e gestione della memoria automatica) rendono il Python allo stesso tempo elementare nella sintassi e nell'uso, ma anche potentissimo. Inoltre non vi è alcun limite nell'occupazione di memoria se non le dimensioni stesse della memoria fisica e virtuale fornite dal sistema operativo, il che sui computer attuali vuol dire ormai diverse centinaia di Megabyte!


Tipi elementari
Tipo di                           Elementi    Tipo      Tipo
oggetto                           mutabili  sequenza  mappabile
----------------------------------------------------------------
Numeri (interi/float/complessi)
----------------------------------------------------------------
Stringhe                                       si
----------------------------------------------------------------
Liste                                si        si        
----------------------------------------------------------------
Tuple                                          si
----------------------------------------------------------------
Dizionari                            si                  si
----------------------------------------------------------------


Strutture dati, liste e loro metodi, tuple, insiemi, dizionari


I tipi sequenza sono iterabili con FOR
Nell'iterazione alla variabile z vengono assegnati di volta in volta i singoli elementi della sequenza a partendo dal primo a sinistra (in questo caso a è una stringa per cui i singoli elementi sono i singoli caratteri della stringa stessa).

a="STRINGA"
for z in a:
    print z

Il risultato è:
S
T
R
I
N
G
A


Indici
Il primo elemento di ogni tipo sequenza ha indice 0, l'ultimo elemento ha indice len(sequenza)-1.


Array e liste
In python gli array si possono realizzare con le liste. Ogni elemento di una lista può contenere oggetti di qualsiasi tipo, anche diverso tra loro, comprese altre liste. Una lista può estendersi dinamicamente a destra con il metodo nomelista.append(oggetto). Una lista può anche essere vuota.

a=[0]*100                                          # array di 100 interi
a=[[0]*5 for i in range(10)]                       # array 10*5 interi

a=[[[0]*5 for i in range(10)] for i in range(100)] # array 100*10*5 interi

a[x][y][z]=150  con  x da 0 a 99,  y da 0 a 9,  z da 0 a 4



Oppure si può usare un array "flat":

a=[0]*(100*10*5)            # array di 5000 interi
a[(50*x)+(5*y)+z]           # accesso all'elemento x,y,z (0..99),(0..9),(0..4)  



Per lavorare con gli array di tipi omogenei vedere anche il modulo [array]