• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Py t1 python-intro
 

Py t1 python-intro

on

  • 1,233 views

 

Statistics

Views

Total Views
1,233
Views on SlideShare
1,233
Embed Views
0

Actions

Likes
0
Downloads
17
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Py t1 python-intro Py t1 python-intro Presentation Transcript

    • LINGUAGGI DINAMICI PARTE 2 IL LINGUAGGIO PYTHON Linguaggi dinamici – A.A. 2009/2010 1
    • Parte 2 Introduzione al Python y Linguaggi dinamici – A.A. 2009/2010 2
    • 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
    • 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
    • Æ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
    • 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
    • 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
    • Scheletro di un programma Python #!/usr/bin/python <Direttive di importazione moduli esterni> <Sequenza di statement> Linguaggi dinamici – A.A. 2009/2010 8
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Æ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
    • 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
    • Æ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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Æ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
    • 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
    • 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
    • Æ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
    • 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
    • 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
    • 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
    • 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
    • Æ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
    • 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
    • Æ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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Æ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
    • Æ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
    • 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
    • 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
    • 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