Upload
majong-devjfu
View
1.385
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
LINGUAGGI DINAMICILINGUAGGI DINAMICIPARTE 2
IL LINGUAGGIO PYTHONIL LINGUAGGIO PYTHON
Linguaggi dinamici – A.A. 2009/20101
Parte 2
Introduzione al Pythony
Linguaggi dinamici – A.A. 2009/20102
Un po’ di storia
� Python: nasce nel 1990, quale strumento di aiuto per il sistema distribuito Amoebaaiuto per il sistema distribuito Amoeba(Andrew S. Tanenbaum)
� Il nome prende ispirazione dal gruppo teatrale� Il nome prende ispirazione dal gruppo teatrale inglese dei Monty Python
Autore: Guido Van Rossum� 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/20103
Caratteristiche
� Sintassi estremamente concisa
Motto del Python: “There should be one (and� Motto del Python: “There should be one (and preferably only one) obvious way to do it”
S t ll t il l l di t ib it� Supporto eccellente per il calcolo distribuito
� 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/20104
EsecuzioneÆESEMPIhello_world.py
� L'esecuzione avviene attraverso l'interprete python presente in forma pacchettizzata inpython, presente in forma pacchettizzata in tutte le distribuzioni di software moderne
� GNU/Linux (Debian): sudo apt-get install python� 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 t ll'i t targomento all'interprete:
� python filename
� python -c 'statement '
� python (shell interattiva)
Linguaggi dinamici – A.A. 2009/20105
py ( )
Documentazione
� Il Python fornisce il proprio strumento di documentazione analogo alle man pagedocumentazione, analogo alle man page
� Comando pydoc (incluso nel pacchetto python)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/20106
Blocchi di codice, statement, commenti
� Il singolo statement può essere concluso opzionalmente da un punto e virgolaopzionalmente da un punto e virgola
� print “Hello world\n”; print “Ciao mondo”;
U t t t ò t iù i h� Uno statement può essere spezzato su più righe con una sequenza di escape (\)
Il bl di di è tt i t d ll� Il blocco di codice è caratterizzato dalla sua indentazione
while b < 10:
print b
a, b = b, a+b
� Il carattere # rappresenta l'inizio di un
Linguaggi dinamici – A.A. 2009/20107
ppcommento
Scheletro di un programma Python
#!/usr/bin/python
<Direttive di importazione moduli esterni>
<Sequenza di statement>
Linguaggi dinamici – A.A. 2009/20108
Direttive di importazione moduli
� Una direttiva di importazione moduli è uno statement che importa uno dei moduli delstatement che importa uno dei moduli del Python
Tali moduli arricchiscono le funzionalità� Tali moduli arricchiscono le funzionalità esterne offerte
GUI d t b t i th d fil� GUI, database, rete, processi, thread, 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/20109
Variabili
� In Python, esiste un unico tipo di variabile: l'oggettol oggetto
� Tramite gli oggetti, sono definiti i seguenti tipi di dato builtin (nell'interprete)di dato builtin (nell interprete)
� Numerics: valori numerici (int, float, long, l )complex)
� Iterator: iteratori su insiemi
� Sequence: sequenze di oggetti (str, unicode, list, tuple, buffer, xrange)
� Set: insiemi (set, frozenset)
� Per maggiori informazioni:
Linguaggi dinamici – A.A. 2009/201010
gghttp://docs.python.org/library/stdtypes.html
Variabili
� Attenzione: in Python, non vengono utilizzati caratteri speciali per distinguere il tipo dicaratteri speciali per distinguere il tipo di variabile!
Se si utilizza lo stesso nome per una nuova� Se si utilizza lo stesso nome per una nuova variabile, viene sovrascritto il contenuto della variabile precedente!variabile precedente!
� Il tipo di dato non deve essere dichiarato li it tesplicitamente
� Assegnamento: si usa l'operatore =
Linguaggi dinamici – A.A. 2009/201011
Nomi delle variabili
� Tutte le variabili sono identificate con un nome ossia una combinazione arbitrariamentenome, ossia una combinazione arbitrariamente lunga di lettere, digit ed underscore (_)
Esempi di nomi di variabile leciti:� Esempi di nomi di variabile leciti:
� foo
f bl h� foo_blah
� x100y200z
� HiDave
� Very Descriptive Namey_ p _
Linguaggi dinamici – A.A. 2009/201012
Operatori di confronto
� Il Python mette a disposizione operatori di confronto unici per tutti gli oggetticonfronto unici per tutti gli oggetti
� Cosa è considerato falso?
L t t N ( l i t t )� La costante None (valore non esistente)
� 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/201013
� Tutto il resto è considerato vero
Operatori booleani
� Gli operatori booleani (builtin) hanno la stessa sintassi del linguaggio Csintassi del linguaggio C
� Operatore or logico or:
S il i d è F l it il d� Se il primo operando è False, ritorna il secondo
� Altrimenti, ritorna il primo operando
� Operatore and logico and:
� Se il primo operando è Falso, lo ritornap p ,
� Altrimenti, ritorna il secondo operando
Operatore di negazione logica not:� Operatore di negazione logica not:
� Se l'operando è False, ritorna True
S èLinguaggi dinamici – A.A. 2009/2010
14
� Se l'operando è True, ritorna False
Operatori booleani
� Gli operatori booleani hanno la stessa sintassi del linguaggio Cdel linguaggio C
� Operatore or bit a bit |:
Rit il i lt t d ll' bit bit� Ritorna il risultato dell'or bit a bit
� 1 | 4 = 5
� Operatore and bit a bit &:
� Ritorna il risultato dell'and bit a bit
� 1 & 3 = 1
Linguaggi dinamici – A.A. 2009/201015
Operatori di confronto
Confronto Operatore
Uguale
Diverso
==
!=Diverso
Minore di
Maggiore di
!
<
>Maggiore di
Minore o uguale di
>
<=
Maggiore o uguale di >=
Linguaggi dinamici – A.A. 2009/201016
Variabili numeric
� La variabile numeric (o, più semplicemente, un numeric) implementa i tipi di dato numericinumeric) implementa i tipi di dato numerici
� Numeri interi
N i i t i l hi� Numeri interi lunghi
� Numeri float
� Numeri complessi
Linguaggi dinamici – A.A. 2009/201017
Numeri interi ed interi lunghi
� I numeri interi sono implementati tramite il tipo di dato long del Cdi dato long del C
� Precisione di almeno 32 bit
Li iti t bili t it il d l� Limiti: stampabili tramite il modulo sys(variabile sys.maxint)
S di di it� Sequenza di 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/201018
Numeri float e complex
� I numeri float sono implementati tramite il tipo di dato double del Cdi dato double del C
� Precisione dipende dall'architettura
S t t i t /d i l� Separatore parte intera/decimale: .
� I numeri complex hanno una parte reale ed una i i i t bi di ti d blimmaginaria, entrambi di tipo double
� Numero reale + numero reale con suffisso j:10 20j 4j10 + 20j, -4j
� z.real: parte reale
� z.imag: parte immaginaria
Linguaggi dinamici – A.A. 2009/201019
Operazioni sulle variabili numeric
� Operazioni aritmetiche standard: +, -, *, /
Divisione intera: //� 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()� Numero complesso coniugato: conjugate()
� Elevamento a potenza: pow(), **
� Arrotondamento: math.trunc(), round(), math.floor(), math.ceil()
Linguaggi dinamici – A.A. 2009/201020
Operazioni sulle variabili numericÆESEMPI
numeric.pyconfronto.py
� Or bit a bit: |
Or esclusivo 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� Shift logico a destra di n bit: n
� Negazione dei bit: ~
Linguaggi dinamici – A.A. 2009/201021
Variabili iterator
� La variabile iterator (o, più semplicemente, un iterator) implementa il concetto di iterazione suiterator) implementa il concetto di iterazione su un insieme
� Una variabile iterator è un oggetto che ha un� Una variabile iterator è un oggetto che ha un metodo next() che ritorna l'elemento successivo dall'insiemedall insieme
Linguaggi dinamici – A.A. 2009/201022
Variabili iteratorÆESEMPI
iterator.py
� Ogni classe può ritornare un iteratore, basta che definisca il metodo iter ()che definisca il metodo __iter__()
� Se la classe stessa ha un metodo next(), it () ò it lf (l’ tt t )__iter__() può ritornare self (l’oggetto stesso)
� In generale, la funzione iter() applicata su un oggetto restituisce un appropriato iteratoregg pp p
� Esempio: sum(i*i for i in range(10))
Qui l'elenco dei numeri da 0 a 9 è unito ad un� Qui, l elenco dei numeri da 0 a 9 è unito ad un oggetto di iterazione
Linguaggi dinamici – A.A. 2009/201023
Variabili sequence
� La variabile sequence (o, più semplicemente, una sequence) implementa il concetto diuna sequence) implementa il concetto di sequenza di elementi
� Stringhe� Stringhe
� Liste
T l� Tuple
� Buffer
� Xrange
Linguaggi dinamici – A.A. 2009/201024
Stringhe
� Le variabili contenenti una stringa devono essere racchiuse fra singole quote ('') oppureessere racchiuse fra singole quote ( ) oppure fra doppie quote (“”)
In Python non vi è differenza alcuna fra� In Python, non vi è differenza alcuna fra singole quote e doppie quote
O i t è i tili l t� Ovviamente, è necessario utilizzare lo stesso tipo di quote per l'apertura e la chiusura della stringastringa
� Se si usa un quote, non è necessario effettuare l'escape dell'altro tipo di quotel escape dell altro tipo di quote
� '”Prova”', “'Prova'”, '\'Prova\''
Linguaggi dinamici – A.A. 2009/201025
Quoting e backslash
� All'interno di una stringa quotata, il carattere backslash (\) introduce le sequenze specialibackslash (\) introduce le sequenze speciali
� \n: newline
\ i t� \r: carriage return
� \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 raw, che non viene interpretata quando si stampa
Linguaggi dinamici – A.A. 2009/201026
Esempi di stringhe
Espressione:
“Hello\n”
Risultato visivo:
Hello Newline“Hello\n”
r“Hello\n”
Hello
Hello\n
Newline
No newline
“12\t6\t3”
r“12\t6\t3”
12 6 3
12\t6\t3r 12\t6\t3
'He said ”Hi”'
'He said \\”Hi\\”'
12\t6\t3
He said ”Hi”
He said \”Hi\”'He said \\”Hi\\”' He said \”Hi\”
Linguaggi dinamici – A.A. 2009/201027
Interpolazione di variabili
� In Python, l'interpolazione avviene traducendo una variabile in stringa ed attaccando iluna variabile in stringa ed attaccando il risultato ad un'altra stringa
num = 13num = 13
foo = “The number is “ + str(num) + “\n”
print foo
The number is 13
Linguaggi dinamici – A.A. 2009/201028
Operatori stringa
� Il Python mette a disposizione l'operatore di concatenazione di stringhe (+)concatenazione di stringhe (+)
� Esempi
"D " " " "H lli "myname = "Dave" + " " + "Hollinger"
myname = first + blank + last
� Attenzione, non è possibile concatenare stringhe con numeri, come invece avviene in g ,Java
Linguaggi dinamici – A.A. 2009/201029
Operatori stringa
� Il Python mette a disposizione l'operatore di ripetizione di stringhe (*)ripetizione di stringhe ( )
Espressione:
“M” * 4
Valore:
'MMMM'M 4
“Hello” * 2
MMMM
'HelloHello'
“Joe” * (5 - 2) 'JoeJoeJoe'
Linguaggi dinamici – A.A. 2009/201030
Metodi definiti sulle stringheÆESEMPI
string.py
� s.capitalize(): ritorna una copia della stringa con la prima lettera maiuscolacon la prima lettera maiuscola
� s.count(): ritorna il numero di occorrenze di una sottostringauna sottostringa
� s.find(): ritorna l'indice di occorrenza di una tt t isottostringa
� 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
Linguaggi dinamici – A.A. 2009/201031
http://docs.python.org/library/stdtypes.html
Liste
� Le liste sono contenitori generici di oggetti qualunque senza dichiarazione esplicitaqualunque, senza dichiarazione esplicita (dynamic typing)
� Intero� Intero
� Floating point
Stringa� 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/201032
Assegnazione lista
� Si utilizza l'operatore =
wt = [1 2 3 4]wt = [1, 2, 3, 4]
wt = [1, “ciao”, 2]
wt = [1, [2, 3], 4] qui, il secondo elemento è un array
wt = [ ][ ]
Linguaggi dinamici – A.A. 2009/201033
Accesso elementi di una listaÆESEMPI
� Ciascun elemento di un array è una variabile oggetto rappresentante un dato qualunqueoggetto rappresentante un dato qualunque
� Per il resto, la sintassi è simile al C
Gli i di i di t d 0� Gli indici di un array partono da 0
wt = [1, 2, 3, 4]
print wt[2] Stampa 3
� Si possono usare indici negativi; -1 è l'ultimo elemento 2 il penultimo e così viaelemento, -2 il penultimo, e così via
Linguaggi dinamici – A.A. 2009/201034
Array multidimensionali
� Gli array multidimensionali sono dichiarati e gestiti come nel linguaggio Cgestiti come nel linguaggio C
� Si definisce un array di array
Si lt li i i di i f t i d� Si usano molteplici indici fra parentesi quadre per l'accesso
wt = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
print wt[0][0]Stampa 1
p [ ][ ]Stampa 1
Linguaggi dinamici – A.A. 2009/201035
Liste e code
� La lista può essere gestita come una coda
Metodo append dell'oggetto lista:� 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/201036
Liste e stack
� La lista può essere gestita come uno stack
Metodo append dell'oggetto lista:� 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/201037
Slicing delle liste
� Il Python permette la gestione diretta di porzioni di array (slicing)porzioni di array (slicing)
� Operatore di range : permette di specificare un intervallo contiguo di indici di una listaun 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/201038
Metodi definiti sulle listeÆESEMPI
liste.py
� Funzione enumerate(lista): ritorna coppie del tipo (indice valore) utilizzabili in un ciclotipo (indice, valore) utilizzabili in un ciclo
for index, item in enumerate(L):
i t i d itprint index, item
� Funzione len(lista): ritorna il numero di elementi contenuti in una lista
� Metodo lista.sort(): ordina gli oggetti () g ggcontenuti in una lista
� Metodo lista reverse(lista): capovolge la� Metodo lista.reverse(lista): capovolge la sequenza degli oggetti contenuti in una lista
Linguaggi dinamici – A.A. 2009/201039
Variabili xrange
� La variabile xrange (o, più semplicemente, un xrange) implementa il concetto di sequenzaxrange) implementa il concetto di sequenza non modificabile durante una iterazione
Una variabile xrange è un oggetto che:� Una variabile xrange è un oggetto che:
� ha un meccanismo per l'indicizzazione degli l tielementi
� 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/201040
Variabili setÆESEMPI
set.py
� La variabile set (o, più semplicemente, un set) implementa il concetto di insieme costruito aimplementa il concetto di insieme, costruito a partire da un oggetto iteratore
S = set(range(10))� S = set(range(10))
� Alcuni metodi a disposizione dei set
� Cardinalità: len(S)
� Appartenenza all'insieme: x in S, x not in Spp ,
� Disgiunzione: isdisjoint(S2)
Unione: union(S2)� Unione: union(S2)
� Intersezione: intersection(S2)
Linguaggi dinamici – A.A. 2009/201041
� Differenza: difference(S2)
Variabili mapping
� La variabile dictionary (o, più semplicemente, un dictionary) rappresenta l'astrazione di unaun dictionary) rappresenta l astrazione di una lista associativa
� Può contenere più di un valore� Può contenere più di un valore
� Il valore può essere un oggetto qualunque, senza dichiarazione esplicita (dynamic typing)senza dichiarazione esplicita (dynamic typing)
� Intero
Fl ti i t� Floating point
� Stringa
� Altro...
Linguaggi dinamici – A.A. 2009/201042
Assegnamento dictionary
� Si utilizza l'operatore = per l'assegnamento del dictionary ad una variabiledel dictionary ad una variabile
� Si può inizializzare un dictionary in due modi distinti:distinti:
� Sequenza di coppie key: value separate da i l fi t i t i ffvirgola e confinate in parentesi graffe
� Uso del costruttore dict()
wt = dict( one=1, two=2)
wt = dict( { 'one': 1, 'two': 2 } )( { , } )
wt = {}
Linguaggi dinamici – A.A. 2009/201043
Accesso elementi di un dictionary
� Ciascun elemento di un dictionary è un oggettooggetto
� La chiave di accesso può essere anche una listalista
print wt['one'] Stampa 1
Linguaggi dinamici – A.A. 2009/201044
Esistenza chiavi dictionary
� Si utilizza la funzione in per controllare se una chiave esiste in un dictionarychiave esiste in un dictionary
� key in dictionary: ritorna True se il dictionary ha la chiave key False altrimentiha la chiave key, False altrimenti
� key not in dictionary: equivalente dinot key in dictionarynot key in dictionary
� La funzione in è utilizzabile anche sulle liste!
Linguaggi dinamici – A.A. 2009/201045
Distruzione chiavi dictionary
� Si utilizza la funzione del per distruggere una chiave ed il suo contenutochiave ed il suo contenuto
del wt['one']
d l() f i h li ( i� del() funziona anche con gli array (si usa 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/201046
Accesso a chiavi e valoriÆESEMPI
dictionary.py
� Viene messo a disposizione un metodo molto comod per gestire in blocco l'intero insiemecomod per gestire in blocco l intero insieme delle chiavi e dei valori di un hash
iter (dictionary):� iter (dictionary):
� Ritorna un oggetto iteratore sulle chiavi del dictionary utilizzabile nei ciclidictionary, utilizzabile nei cicli
for k in iter(wt):
print k, wt[k]
Linguaggi dinamici – A.A. 2009/201047
ScopeÆESEMPI
global.pyglobal2.py
� Il modello di scoping del Python è unico e statico (determinato a tempo di compilazione)statico (determinato a tempo di compilazione)
� Se una variabile non è definita nel blocco attuale viene cercata in tutti i blocchi che loattuale, viene cercata in tutti i blocchi che lo contengono
S i bil è d fi it i bl è� Se una variabile è definita in un blocco, è 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
Linguaggi dinamici – A.A. 2009/201048
p
Costrutti condizionali
� Costrutto if-elif-else: simile al linguaggio C
If condizione:If condizione:
statement
elif condizione:
statement
. . .
else:else:
statement
Linguaggi dinamici – A.A. 2009/201049
Costrutti iterativi
� Costrutto while: identico al linguaggio C
while condizione:while condizione:
statement
� Costrutto for: simile al linguaggio C
for variabile in lista:
statement
� Funzione range(): costruisce un intervallo di� Funzione range(): costruisce un intervallo di interi
Linguaggi dinamici – A.A. 2009/201050
Comandi di salto
� Comando break:
Interrompe un ciclo for/while� 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 iterazioniiterazioni
� Non viene eseguita in caso di break
Linguaggi dinamici – A.A. 2009/201051