Py t1 python-intro

1,208 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,208
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Py t1 python-intro

  1. 1. LINGUAGGI DINAMICI PARTE 2 IL LINGUAGGIO PYTHON Linguaggi dinamici – A.A. 2009/2010 1
  2. 2. Parte 2 Introduzione al Python y Linguaggi dinamici – A.A. 2009/2010 2
  3. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×