2. Parte 2
Introduzione al Python
y
Linguaggi dinamici – A.A. 2009/2010
2
3. Un po’ di storia
„ Python: nasce nel 1990, quale strumento di
aiuto per il sistema distribuito Amoeba
(Andrew S. Tanenbaum)
„ Il nome prende ispirazione dal gruppo teatrale
inglese dei Monty Python
„ Autore: Guido Van Rossum
„ 2009: V2.6 (stabile)
„ Python è il linguaggio dinamico di riferimento
per la piattaforma dei servizi offerti da Google
„ di cui Van Rossum è dipendente dal 2005
Linguaggi dinamici – A.A. 2009/2010
3
4. Caratteristiche
„ Sintassi estremamente concisa
„ Motto del Python: “There should be one (and
preferably only one) obvious way to do it”
„ Supporto eccellente per il calcolo distribuito
S t ll t l l di t ib it
„ Poco liberale nei costrutti e nella tipizzazione
„ Archivio di moduli ridotto, ma consistente e
stabile (http://docs.python.org/modindex.html)
( p py g )
„ Portabile
Linguaggi dinamici – A.A. 2009/2010
4
5. ÆESEMPI
hello_world.py
Esecuzione
„ L'esecuzione avviene attraverso l'interprete
python,
python presente in forma pacchettizzata in
tutte le distribuzioni di software moderne
„ GNU/Linux (Debian): sudo apt-get install python
„ Windows:
http://www.python.org/download/windows/
http://www python org/download/windows/
„ Si esegue un programma passandolo come
argomento all'interprete:
t ll'i t t
„ python filename
„ python -c 'statement '
„ py
python (shell interattiva)
( )
Linguaggi dinamici – A.A. 2009/2010
5
6. Documentazione
„ Il Python fornisce il proprio strumento di
documentazione,
documentazione analogo alle man page
„ Comando pydoc (incluso nel pacchetto
python)
„ Incluso nel pacchetto python
„ pydoc pydoc
„ Usi comuni:
„ pydoc argomento: invoca la man page di
argomento (deve essere un nome esatto)
g ( )
„ pydoc -k parola_chiave: ricerca la parola chiave
nella sinossi dei moduli
Linguaggi dinamici – A.A. 2009/2010
6
7. Blocchi di codice, statement, commenti
„ Il singolo statement può essere concluso
opzionalmente da un punto e virgola
„ print “Hello worldn”; print “Ciao mondo”;
„ Uno statement può essere spezzato su più righe
U t t t ò t iù i h
con una sequenza di escape ()
„ Il bl
blocco di codice è caratterizzato dalla sua
di tt i t d ll
indentazione
while b < 10:
print b
a, b = b, a+b
„ Il carattere # rappresenta l'inizio di un
pp
commento
Linguaggi dinamici – A.A. 2009/2010
7
8. Scheletro di un programma Python
#!/usr/bin/python
<Direttive di importazione moduli esterni>
<Sequenza di statement>
Linguaggi dinamici – A.A. 2009/2010
8
9. Direttive di importazione moduli
„ Una direttiva di importazione moduli è uno
statement che importa uno dei moduli del
Python
„ Tali moduli arricchiscono le funzionalità
esterne offerte
„ GUI, database, rete, processi, th
GUI d t b t i thread, fil
d file
„ Il formato di una direttiva di importazione è il
seguente:
„import Path.To.NameSpace.Module
„ Il modulo è identificato dal suo nome completo
(inclusivo di namespace)
Linguaggi dinamici – A.A. 2009/2010
9
10. Variabili
„ In Python, esiste un unico tipo di variabile:
l oggetto
l'oggetto
„ Tramite gli oggetti, sono definiti i seguenti tipi
di dato builtin (nell'interprete)
(nell interprete)
„ Numerics: valori numerici (int, float, long,
complex)l )
„ Iterator: iteratori su insiemi
„ Sequence: sequenze di oggetti (str, unicode,
list, tuple, buffer, xrange)
„ Set: insiemi (set, frozenset)
„ Per maggiori informazioni:
gg
http://docs.python.org/library/stdtypes.html
Linguaggi dinamici – A.A. 2009/2010
10
11. Variabili
„ Attenzione: in Python, non vengono utilizzati
caratteri speciali per distinguere il tipo di
variabile!
„ Se si utilizza lo stesso nome per una nuova
variabile, viene sovrascritto il contenuto della
variabile precedente!
„ Il tipo di dato non deve essere dichiarato
esplicitamente
li it t
„ Assegnamento: si usa l'operatore =
Linguaggi dinamici – A.A. 2009/2010
11
12. Nomi delle variabili
„ Tutte le variabili sono identificate con un
nome,
nome ossia una combinazione arbitrariamente
lunga di lettere, digit ed underscore (_)
„ Esempi di nomi di variabile leciti:
„ foo
„ foo_blah
f bl h
„ x100y200z
„ HiDave
„ Very Descriptive_Name
y_ p
Linguaggi dinamici – A.A. 2009/2010
12
13. Operatori di confronto
„ Il Python mette a disposizione operatori di
confronto unici per tutti gli oggetti
„ Cosa è considerato falso?
„ La
L costante N
t t None ( l
(valore non esistente)
i t t )
„ La costante False (valore falso logicamente)
„ La costante 0 di ogni tipo numerico: 0, 0L, 0.0,
0j
„ Ogni sequenza vuota: ' ', ( ), [ ]
„ Qualunque classe il cui metodo __len__ ritorni 0
q
o False
„ Tutto il resto è considerato vero
Linguaggi dinamici – A.A. 2009/2010
13
14. Operatori booleani
„ Gli operatori booleani (builtin) hanno la stessa
sintassi del linguaggio C
„ Operatore or logico or:
„ Se
S il primo operando è False, ritorna il secondo
i d F l it d
„ Altrimenti, ritorna il primo operando
„ Operatore and logico and:
„ Se il primo operando è Falso, lo ritorna
p p ,
„ Altrimenti, ritorna il secondo operando
„ Operatore di negazione logica not:
„ Se l'operando è False, ritorna True
„ Se
S l'operando è True, ritorna False
Linguaggi dinamici – A.A. 2009/2010
14
15. Operatori booleani
„ Gli operatori booleani hanno la stessa sintassi
del linguaggio C
„ Operatore or bit a bit |:
„ Ritorna il risultato d ll' bit a bit
Rit i lt t dell'or
„ 1|4=5
„ Operatore and bit a bit &:
„ Ritorna il risultato dell'and bit a bit
„ 1&3=1
Linguaggi dinamici – A.A. 2009/2010
15
16. Operatori di confronto
Confronto Operatore
Uguale ==
Diverso !
!=
Minore di <
Maggiore di >
Minore o uguale di <=
Maggiore o uguale di >=
Linguaggi dinamici – A.A. 2009/2010
16
17. Variabili numeric
„ La variabile numeric (o, più semplicemente, un
numeric) implementa i tipi di dato numerici
„ Numeri interi
„ Numeri interi lunghi
N ii t il hi
„ Numeri float
„ Numeri complessi
Linguaggi dinamici – A.A. 2009/2010
17
18. Numeri interi ed interi lunghi
„ I numeri interi sono implementati tramite il tipo
di dato long del C
„Precisione di almeno 32 bit
„ Li
Limiti: stampabili tramite il modulo sys
iti t bili t it d l
(variabile sys.maxint)
„ SSequenza di di it
digit
„ Gli interi lunghi hanno precisione illimitata
„ Sequenza di digit terminata da l o L: 120000L,
100000000000L
„ L’interprete alloca la memoria necessaria
Linguaggi dinamici – A.A. 2009/2010
18
19. Numeri float e complex
„ I numeri float sono implementati tramite il tipo
di dato double del C
„ Precisione dipende dall'architettura
„ S
Separatore parte intera/decimale: .
t t i t /d i l
„ I numeri complex hanno una parte reale ed una
immaginaria, entrambi di tipo d bl
i i i t bi ti double
„ Numero reale + numero reale con suffisso j:
10 + 20j -4j
20j, 4j
„ z.real: parte reale
„ z.imag: parte immaginaria
Linguaggi dinamici – A.A. 2009/2010
19
20. Operazioni sulle variabili numeric
„ Operazioni aritmetiche standard: +, -, *, /
„ Divisione intera: //
„ / tra interi restituisce il quoziente; // è per reali
„ Resto divisione intera: %
„ Valore assoluto: abs()
()
„ Conversione ad altri tipi: int(), long(), float()
„ Numero complesso coniugato: conjugate()
„ Elevamento a potenza: pow(), **
„ Arrotondamento: math.trunc(), round(),
math.floor(), math.ceil()
Linguaggi dinamici – A.A. 2009/2010
20
21. ÆESEMPI
numeric.py
Operazioni sulle variabili numeric confronto.py
„ Or bit a bit: |
„ Or esclusivo bit a bit: ^
„ And esclusivo bit a bit: &
„ Shift logico a sinistra di n bit: << n
„ Shift logico a destra di n bit: >> n
„ Negazione dei bit: ~
Linguaggi dinamici – A.A. 2009/2010
21
22. Variabili iterator
„ La variabile iterator (o, più semplicemente, un
iterator) implementa il concetto di iterazione su
un insieme
„ Una variabile iterator è un oggetto che ha un
metodo next() che ritorna l'elemento successivo
dall insieme
dall'insieme
Linguaggi dinamici – A.A. 2009/2010
22
23. ÆESEMPI
iterator.py
Variabili iterator
„ Ogni classe può ritornare un iteratore, basta
che definisca il metodo __iter__()
iter ()
„ Se la classe stessa ha un metodo next(),
__iter__() può ritornare self (l’oggetto stesso)
it () ò it lf (l’ tt t )
„ In generale, la funzione iter() applicata su un
oggetto restituisce un appropriato iteratore
gg pp p
„ Esempio: sum(i*i for i in range(10))
„ Qui, l'elenco
Qui l elenco dei numeri da 0 a 9 è unito ad un
oggetto di iterazione
Linguaggi dinamici – A.A. 2009/2010
23
24. Variabili sequence
„ La variabile sequence (o, più semplicemente,
una sequence) implementa il concetto di
sequenza di elementi
„ Stringhe
„ Liste
„ Tuple
T l
„ Buffer
„ Xrange
Linguaggi dinamici – A.A. 2009/2010
24
25. Stringhe
„ Le variabili contenenti una stringa devono
essere racchiuse fra singole quote ( ) oppure
('')
fra doppie quote (“”)
„ In Python, non vi è differenza alcuna fra
Python
singole quote e doppie quote
„Ovviamente, è necessario utilizzare lo stesso
O i t i tili l t
tipo di quote per l'apertura e la chiusura della
stringa
„ Se si usa un quote, non è necessario effettuare
l escape dell altro
l'escape dell'altro tipo di quote
„ '”Prova”', “'Prova'”, ''Prova''
Linguaggi dinamici – A.A. 2009/2010
25
26. Quoting e backslash
„ All'interno di una stringa quotata, il carattere
backslash () introduce le sequenze speciali
„ n: newline
„ r:
carriage return
i t
„ t: tabulazione
„ : un singolo carattere backslash
„ ”: un singolo carattere di virgolette “
„ Una ‘r’ prima delle quote significa una stringa
raw, che non viene interpretata quando si
stampa
Linguaggi dinamici – A.A. 2009/2010
26
27. Esempi di stringhe
Espressione: Risultato visivo:
“Hellon” Hello Newline
r“Hellon” Hellon No newline
“12t6t3” 12 6 3
r 12t6t3
r“12t6t3” 12t6t3
'He said ”Hi”' He said ”Hi”
'He said ”Hi”' He said ”Hi”
Linguaggi dinamici – A.A. 2009/2010
27
28. Interpolazione di variabili
„ In Python, l'interpolazione avviene traducendo
una variabile in stringa ed attaccando il
risultato ad un'altra stringa
num = 13
foo = “The number is “ + str(num) + “n”
print foo
The number is 13
Linguaggi dinamici – A.A. 2009/2010
28
29. Operatori stringa
„ Il Python mette a disposizione l'operatore di
concatenazione di stringhe (+)
„ Esempi
myname = "D"Dave" + " " + "H lli
" "Hollinger"
"
myname = first + blank + last
ƒ Attenzione, non è possibile concatenare
stringhe con numeri, come invece avviene in
g ,
Java
Linguaggi dinamici – A.A. 2009/2010
29
30. Operatori stringa
„ Il Python mette a disposizione l'operatore di
ripetizione di stringhe (*)
()
Espressione: Valore:
“M” * 4
M 'MMMM'
MMMM
“Hello” * 2 'HelloHello'
“Joe” * (5 - 2) 'JoeJoeJoe'
Linguaggi dinamici – A.A. 2009/2010
30
31. ÆESEMPI
string.py
Metodi definiti sulle stringhe
„ s.capitalize(): ritorna una copia della stringa
con la prima lettera maiuscola
„ s.count(): ritorna il numero di occorrenze di
una sottostringa
„ s.find(): ritorna l'indice di occorrenza di una
sottostringa
tt t i
„ s.join(): ritorna la concatenazione in stringa
degli elementi di una lista, separati da s
„ [ ] si accede ad un singolo carattere
]: g
„ E tantissimi altri; per ulteriori informazioni:
http://docs.python.org/library/stdtypes.html
http://docs python org/library/stdtypes html
Linguaggi dinamici – A.A. 2009/2010
31
32. Liste
„ Le liste sono contenitori generici di oggetti
qualunque, senza dichiarazione esplicita
(dynamic typing)
„ Intero
„ Floating point
„ Stringa
„ Sono costruite in maniera analoga al Perl
„ Esempio: lista = [1, 2, 3]
„ Una lista può contenere un'altra lista!
p
Linguaggi dinamici – A.A. 2009/2010
32
33. Assegnazione lista
„ Si utilizza l'operatore =
wt = [1, 2, 3 4]
[1 2 3,
wt = [1, “ciao”, 2]
wt = [1, [2, 3], 4] qui, il secondo elemento è un array
wt = [ ]
Linguaggi dinamici – A.A. 2009/2010
33
34. ÆESEMPI
Accesso elementi di una lista
„ Ciascun elemento di un array è una variabile
oggetto rappresentante un dato qualunque
„ Per il resto, la sintassi è simile al C
„ Gli i di i di un array partono da 0
indici t d
wt = [1, 2, 3, 4]
print wt[2] Stampa 3
„ Si possono usare indici negativi; -1 è l'ultimo
elemento, 2 penultimo,
elemento -2 il penultimo e così via
Linguaggi dinamici – A.A. 2009/2010
34
35. Array multidimensionali
„ Gli array multidimensionali sono dichiarati e
gestiti come nel linguaggio C
„ Si definisce un array di array
„ Si usano molteplici indici fra parentesi quadre
lt li i i di i f t i d
per l'accesso
wt = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
p
print wt[0][0]
[ ][ ]
Stampa 1
Linguaggi dinamici – A.A. 2009/2010
35
36. Liste e code
„ La lista può essere gestita come una coda
„ Metodo append dell'oggetto lista:
„ lista.append(oggetto): appende l'oggetto alla lista
„ Metodo pop dell'oggetto lista:
„ lista.pop(indice): estrae l'oggetto in posizione
indice dalla lista
„ lista.pop(0): estrae il primo elemento della lista
Linguaggi dinamici – A.A. 2009/2010
36
37. Liste e stack
„ La lista può essere gestita come uno stack
„ Metodo append dell'oggetto lista:
„ lista.append(oggetto): appende l'oggetto alla lista
„ Metodo pop dell'oggetto lista:
„ lista.pop(): estrae l'oggetto in coda alla lista
Linguaggi dinamici – A.A. 2009/2010
37
38. Slicing delle liste
„ Il Python permette la gestione diretta di
porzioni di array (slicing)
„ Operatore di range : permette di specificare
un intervallo contiguo di indici di una lista
wt = [1, 2, 3, 4, 5]
wt_slice = wt[1:3] start stop
wt_slice = wt[1:5:2] start stop increment
[ ] p
Linguaggi dinamici – A.A. 2009/2010
38
39. ÆESEMPI
liste.py
Metodi definiti sulle liste
„ Funzione enumerate(lista): ritorna coppie del
tipo (indice, valore) utilizzabili in un ciclo
(indice
for index, item in enumerate(L):
print i d
i t index, it
item
„ Funzione len(lista): ritorna il numero di
elementi contenuti in una lista
„ Metodo lista.sort(): ordina gli oggetti
() g gg
contenuti in una lista
„ Metodo lista reverse(lista): capovolge la
lista.reverse(lista):
sequenza degli oggetti contenuti in una lista
Linguaggi dinamici – A.A. 2009/2010
39
40. Variabili xrange
„ La variabile xrange (o, più semplicemente, un
xrange) implementa il concetto di sequenza
non modificabile durante una iterazione
„ Una variabile xrange è un oggetto che:
„ ha un meccanismo per l'indicizzazione degli
elementi
l ti
„ ha un meccanismo per le iterazioni
„ implementa il metodo len() che fornisce la
lunghezza dell'insieme su cui si itera
Linguaggi dinamici – A.A. 2009/2010
40
41. ÆESEMPI
set.py
Variabili set
„ La variabile set (o, più semplicemente, un set)
implementa il concetto di insieme, costruito a
insieme
partire da un oggetto iteratore
„ S = set(range(10))
„ Alcuni metodi a disposizione dei set
„ Cardinalità: len(S)
„ Appartenenza all'insieme: x in S, x not in S
pp ,
„ Disgiunzione: isdisjoint(S2)
„ Unione: union(S2)
„ Intersezione: intersection(S2)
„ Differenza: difference(S2)
Linguaggi dinamici – A.A. 2009/2010
41
42. Variabili mapping
„ La variabile dictionary (o, più semplicemente,
un dictionary) rappresenta l'astrazione di una
l astrazione
lista associativa
„ Può contenere più di un valore
„ Il valore può essere un oggetto qualunque,
senza dichiarazione esplicita (dynamic typing)
„ Intero
„ Fl
Floating point
ti i t
„ Stringa
„ Altro...
Linguaggi dinamici – A.A. 2009/2010
42
43. Assegnamento dictionary
„ Si utilizza l'operatore = per l'assegnamento
del dictionary ad una variabile
„ Si può inizializzare un dictionary in due modi
distinti:
„ Sequenza di coppie key: value separate da
virgola e confinate in parentesi graffe
i l fi t i t i ff
„ Uso del costruttore dict()
wt = dict( one=1, two=2)
wt = dict( { 'one': 1, 'two': 2 } )
( ,
wt = {}
Linguaggi dinamici – A.A. 2009/2010
43
44. Accesso elementi di un dictionary
„ Ciascun elemento di un dictionary è un
oggetto
„ La chiave di accesso può essere anche una
lista
print wt['one'] Stampa 1
Linguaggi dinamici – A.A. 2009/2010
44
45. Esistenza chiavi dictionary
„ Si utilizza la funzione in per controllare se una
chiave esiste in un dictionary
„ key in dictionary: ritorna True se il dictionary
ha la chiave key False altrimenti
key,
„ key not in dictionary: equivalente di
not key in dictionary
„ La funzione in è utilizzabile anche sulle liste!
Linguaggi dinamici – A.A. 2009/2010
45
46. Distruzione chiavi dictionary
„ Si utilizza la funzione del per distruggere una
chiave ed il suo contenuto
del wt['one']
„ d l() funziona anche con gli array (si usa
del() f i h li ( i
l'indice al posto della chiave)
„ Se si cancella l'ultimo elemento dell'array,
l'operazione è equivalente ad una pop
„ Se si cancella un elemento interno, esso
viene rimosso
Linguaggi dinamici – A.A. 2009/2010
46
47. ÆESEMPI
dictionary.py
Accesso a chiavi e valori
„ Viene messo a disposizione un metodo molto
comod per gestire in blocco l intero insieme
l'intero
delle chiavi e dei valori di un hash
„ iter (dictionary):
„ Ritorna un oggetto iteratore sulle chiavi del
dictionary,
dictionary utilizzabile nei cicli
for k in iter(wt):
print k, wt[k]
Linguaggi dinamici – A.A. 2009/2010
47
48. ÆESEMPI
global.py
Scope global2.py
„ Il modello di scoping del Python è unico e
statico (determinato a tempo di compilazione)
„ Se una variabile non è definita nel blocco
attuale,
attuale viene cercata in tutti i blocchi che lo
contengono
„ Se
S una variabile è definita in un blocco, è
i bil d fi it i bl
locale per quel blocco
„ Se una variabile è definita al di fuori delle
funzioni, è considerata globale per un modulo
„ Parola chiave global: permette di riferirsi alla
variabile nel blocco top-level del file
p
Linguaggi dinamici – A.A. 2009/2010
48
49. Costrutti condizionali
„ Costrutto if-elif-else: simile al linguaggio C
If condizione:
statement
elif condizione:
statement
...
else:
statement
Linguaggi dinamici – A.A. 2009/2010
49
50. Costrutti iterativi
„ Costrutto while: identico al linguaggio C
while condizione:
statement
„ Costrutto for: simile al linguaggio C
for variabile in lista:
statement
„ Funzione range(): costruisce un intervallo di
interi
Linguaggi dinamici – A.A. 2009/2010
50
51. Comandi di salto
„ Comando break:
„ Interrompe un ciclo for/while
„ Comando continue:
„ Salta all'iterazione for/while successiva
„ Clausola else:
„ Può essere inserita alla fine di un blocco
relativo ad un ciclo
„ Viene eseguita se un ciclo termina tutte le sue
iterazioni
„ Non viene eseguita in caso di break
Linguaggi dinamici – A.A. 2009/2010
51