SlideShare a Scribd company logo
1 of 51
Download to read offline
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

More Related Content

What's hot

Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristicheMajong DevJfu
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingMajong DevJfu
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - TheoryNaLUG
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaCristina Attori
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolarePyCon Italia
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMobileSchool
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48hFLT.lab
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusionePiero Fraternali
 

What's hot (20)

Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
2006 Py01 intro
2006 Py01 intro2006 Py01 intro
2006 Py01 intro
 
Pe t1 perl-intro
Pe t1 perl-introPe t1 perl-intro
Pe t1 perl-intro
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in Java
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
Bash programming
Bash programmingBash programming
Bash programming
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
11 I File
11   I File11   I File
11 I File
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione
 

Viewers also liked

Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testingMajong DevJfu
 
Penetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferPenetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferSimone Onofri
 
Python nel primo biennio della scuola superiore
Python nel primo biennio della scuola superiorePython nel primo biennio della scuola superiore
Python nel primo biennio della scuola superioreguestc11532
 
Scenario reclutamento INFN al 17 Novembre 2008
Scenario reclutamento INFN al 17 Novembre 2008Scenario reclutamento INFN al 17 Novembre 2008
Scenario reclutamento INFN al 17 Novembre 2008dael.maselli
 
Python per tutti
Python per tuttiPython per tutti
Python per tuttimasci
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testingMajong DevJfu
 
Python base 01-numeristringhe
Python base 01-numeristringhePython base 01-numeristringhe
Python base 01-numeristringheStudiabo
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Djangobarmassimo
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 

Viewers also liked (18)

Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
Penetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferPenetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network Sniffer
 
Python nel primo biennio della scuola superiore
Python nel primo biennio della scuola superiorePython nel primo biennio della scuola superiore
Python nel primo biennio della scuola superiore
 
Scenario reclutamento INFN al 17 Novembre 2008
Scenario reclutamento INFN al 17 Novembre 2008Scenario reclutamento INFN al 17 Novembre 2008
Scenario reclutamento INFN al 17 Novembre 2008
 
Python per tutti
Python per tuttiPython per tutti
Python per tutti
 
Pycon
PyconPycon
Pycon
 
T1 introduzione
T1 introduzioneT1 introduzione
T1 introduzione
 
T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
UE week 2
UE week 2UE week 2
UE week 2
 
T5 memoria
T5 memoriaT5 memoria
T5 memoria
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testing
 
T2 architettura
T2 architetturaT2 architettura
T2 architettura
 
T8 supporti
T8 supportiT8 supporti
T8 supporti
 
T6 codice
T6 codiceT6 codice
T6 codice
 
Python base 01-numeristringhe
Python base 01-numeristringhePython base 01-numeristringhe
Python base 01-numeristringhe
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Django
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Py a5 python-text
Py a5 python-textPy a5 python-text
Py a5 python-text
 

Similar to Py t1 python-intro

Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1rik0
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0rik0
 
Coding class da scratch a python
Coding class  da scratch a pythonCoding class  da scratch a python
Coding class da scratch a pythonEnrico La Sala
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tuttiSalvatore Sorrentino
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Commit University
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazioneMajong DevJfu
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del CodiceMajong DevJfu
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)STELITANO
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope VariabiliMajong DevJfu
 

Similar to Py t1 python-intro (18)

Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0
 
Coding class da scratch a python
Coding class  da scratch a pythonCoding class  da scratch a python
Coding class da scratch a python
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1
 
Corso c++
Corso c++Corso c++
Corso c++
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tutti
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#
 
Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)Lezione 21 (2 maggio 2012)
Lezione 21 (2 maggio 2012)
 
Programmazione
ProgrammazioneProgrammazione
Programmazione
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
 
Pyscuola
PyscuolaPyscuola
Pyscuola
 

More from Majong DevJfu

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processesMajong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product lineMajong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture PortfolioMajong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural stylesMajong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architectureMajong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a productMajong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural stylesMajong DevJfu
 

More from Majong DevJfu (20)

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 

Py t1 python-intro

  • 1. LINGUAGGI DINAMICI PARTE 2 IL LINGUAGGIO PYTHON Linguaggi dinamici – A.A. 2009/2010 1
  • 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