ePrometeusCorsoLinuxLinux
testi articoli
Testi Articoli  Download
Home | OpenSource | PhpNuke | Programming | SysAdm | 
CorsoJava è ora Video! Free for all!
Clicca Qui!
UNO SGUARDO AL PYTHON
Uno sguardo al Python
Primo impatto
Sequenze e dizionari
Controllo di flusso
Windows e Java
Classi e Oggetti
Istanze
Classi
Ereditarietà
Eccezioni
Esempio: Gestione Form
Conclusioni
L'Autore


<<< Sequenze e dizionari >>>

In Python abbiamo tre categorie di tipi di dato. I tipi primitivi (interi e float), gli oggetti e le sequenze. Le sequenze presenti in Python attualmente sono stringhe, liste e tuple. Vediamo innanzitutto le stringhe

>>> s = 'Hello'
>>> s = s+', world'
>>> s
'Hello, world'
>>> len(s)
12
>>> s[0:5]
'Hello'
>>> s[7:]
'world'
>>> s[0]
'H'
>>> s[-1]
'd'
>>> dir(s)
[]
>>> x='a'
>>> x=x+'b'
>>> x
'ab'

Le stringhe possono essere espresse con una costante: basta scrivere i caratteri che la compongono tra virgolette, singole o doppie. Le variabili in Python, come ormai dovrebbe essere chiaro, non sono tipizzate e non vanno dichiarate: quindi per creare una variabile contentente una stringa basta assegnare una costante stringa alla variabile. Le stringhe sono immutabili: questo vuol dire che una volta create non possono essere modificate, si può solo creare un'altra stringa. Le stringhe possono essere concatenate utilizzando l'operatore +, come si vede nell'esempio, ma in questo caso vengono buttate via le due stringhe preesistenti, costruendone una nuova risultante dalla concatenazione delle due precedenti. Le stringhe, come tutte le sequenze in genere, sono indicizzabili tramite l'operatore [], che può specificare un range, separato dai due punti: questa operazione viene chiamata slicing.

Riferiamoci all'esempio di prima. Possiamo notare subito che i range partono da 0 e che il range s[a:b] indica tutti gli elementi da a incluso a b escluso. Usare un numero negativo come indice equivale ad indicizzare a partire dall'ultimo elemento; quando ometto il primo elemento del range si intende 0, quando ometto il secondo si intende il len della sequenza. Un esame della stringhe con dir rivela che non ha metodi: questo significa che una stringa può essere manipolata soltanto utilizzando i builtin e gli operatori predefiniti. Un'altra sequenza immutabile è la tupla:

>>> x = 1,2,3
>>> x
(1, 2, 3)
>>> a,b,c = x
>>> a
1
>>> b
2
>>> c
3
>>> x[0:1]
(1,2)
>>> x,y = 7,8
>>> x+y
15

Separando con una virgola una serie di elementi si costruisce una tupla, o meglio si impaccano (packing) gli elementi un una tupla. Questa operazione ha il suo constrario nello spacchettamento (unpacking) della tupla, che si ottiene ponendo una serie di variabili a sinistra di un assegnamento. Essendo le tuple sequenze, anche su di esse si può operare con lo slicing, come le stringhe. Python ha dunque l'assegnamento multiplo, che tecnicamente è un packing ed unpacking di tupla. Le tuple sono comode in molti casi, ma sono immutabili come le stringe, e si può operare con esse solo utilizzando poche operazioni, quelle standard per le sequenze, riassunte in Tabella 1.

Tabella 1

Operazione

Risultato

X in S

Cerca X nella sequenza S

X not in S

Inverso del precedente

S + T

Concatezione generica di sequeze

S * N

Iterazione di S per N volte

S[I]

I-simo elemento di S

S[I:J]

Slice da I incluso a J escluso.

len(S)

Lungheszza della sequenza

Min(S), Max(S)

Minino e massimo di S

Esiste una struttura dati molto più flessibile, ma ovviamente anche più inefficiente, ovvero la lista:

>>> x=[1,3]
>>> x
[1, 3]
>>> x.append(4)
>>> x
[1, 3, 4]
>>> x.insert(1,2)
>>> x
[1, 2, 3, 4]
>>> x.reverse()
>>> x
[4, 3, 2, 1]
>>> dir(x)
['append', 'count', 'index', 'insert', 'remove',
'reverse', 'sort']

A differenza delle tuple, le liste sono mutabili e si possono eseguire più operazioni su di esse. Le liste possono essere create utilizzando l'apposita sintassi, comprendo gli elementi tra parentesi quadre, e su di esse si può operare utilizzando una serie di metodi predefiniti: append, insert, reverse, eccetera, come si può vedere nell'esempio, oltre al solito slicing. Vediamo infine i dizionari, ovvero gli array associativi che sono anche essi tipi primitivi in Python:

>>> x={'a':1, 'b':2}
>>> x
{'b': 2, 'a': 1}
>>> x['a']
1
>>> x['c']=3
>>> dir(x)
['clear', 'copy', 'get', 'has_key', 'items', 'keys',
'update', 'values']
>>> x.keys()
['b', 'c', 'a']
>>> x.values()
[2, 3, 1]
>>> x.items()
[('b', 2), ('c', 3), ('a', 1)]

Il funzionamento dovrebbe essere abbastaza ovvio. Le costanti per definire i dizionari sono della forma { key:val, keys:val, … } . Per accedere agli elementi si usa la sintassi per l'indicizzazione di una sequenza; si può assegnare un elemento per crearlo, e si può eliminare un elemento con del. I dizionari non sono sequenze, ma li tratto in questo paragrafo per affinità con le altre strutture dati primitive. Se serve si possono ottenere facilmente le sequenze delle chiavi, dei valori e di tutti gli elementi (una lista di tuple).

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com