SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
Parte 2




       Programmazione modulare
              in Python




Linguaggi dinamici – A.A. 2009/2010
                                      1
Introduzione
„   Il primo passo verso una attività di
    programmazione che scali con il numero di
    righe di codice del software è l'isolamento
    de e u o a tà del so t a e
    delle funzionalità de software stesso
„   Parti diverse del software
      „   “non si vedono” tra loro
      „   possono essere scritte indipendentemente da
          programmatori diversi
                        di ersi
      „   possono essere cambiate concorrentemente
„   Il Python supporta la modularizzazione tramite
    i package ed i moduli
Linguaggi dinamici – A.A. 2009/2010
                                                        2
Funzione
„   Il Python mette a disposizione un meccanismo
    di definizione delle funzioni
      „   Parola chiave def
„ Esempio:
  E       i
def fib(n):
  a, b = 0, 1
  while b < n:
     print b,
     a, b = b, a + b
            b


Linguaggi dinamici – A.A. 2009/2010
                                                   3
ÆESEMPI

                                      Funzione
                                                               fib.py
                                                             fib2.py


„   def deve essere seguito:
      „   dal nome della funzione
      „   dalla lista dei parametri (fra parentesi tonde),
          che vengono passati per valore (reference ad
           h                   ti       l     ( f        d
          oggetti)
      „   dal
          d l corpo della funzione, opportunamente
                      d ll f   i            t        t
          indentato
„   Il valore di ritorno è
         l        i
      „   quello dell'ultima espressione valutata
      „   l'argomento dello statement return


Linguaggi dinamici – A.A. 2009/2010
                                                                   4
ÆESEMPI

                                      Funzione
                                                              default.py



„   Possono essere specificati degli argomenti di
    default nelle funzioni
      „   Se non li esplicito, il loro valore è quello di
          default
„   Si assegna il valore di default all'argomento
    nello statement di definizione della funzione
def ask_ok(prompt, retries = 4, complaint = 'Yes
    or no, please!'):
                   )
...



Linguaggi dinamici – A.A. 2009/2010
                                                                      5
Modulo
„   Il modulo è l'unità di base per il riuso di codice
„   Un modulo è un file contenente definizioni di
    variabili e funzioni
      „   Il file ha lo stesso nome del modulo ed il
          suffisso .py
„   Ad esempio: file Foo.py
„   All'interno del modulo, il nome del modulo
                           ,
    stesso è ottenibile tramite la variabile globale
    __
    __name__ __



Linguaggi dinamici – A.A. 2009/2010
                                                         6
ÆESEMPI

                 Importazione dei simboli
                                                          fibo.py



„   Un modulo può importare le funzionalità di un
    altro modo
      „   Statement import name: cerca il modulo nel
          percorso dei moduli e ne importa i simboli
      „   Statement from name import lista: cerca il
          modulo nel percorso dei moduli e ne importa i
          simboli definiti nella lista
„   Percorso dei moduli:
      „   Directory corrente
      „   Elenco di directory in PYTHONPATH
      „   Elenco di directory di sistema
          (/usr/lib/python2.6)
Linguaggi dinamici – A.A. 2009/2010
                                                               7
ÆESEMPI

         Uso di moduli come programmi
                                                      fibo2.py



„   Un modulo può essere usato come programma
    principale
„   È necessario capire come si sta usando
„   Uso del valore della variabile __name__
                                     name
     „   Se è “__main__”, significa che lo stiamo usando
         come programma principale
     „   Se è diverso, vuole dire che è usato come
         modulo




Linguaggi dinamici – A.A. 2009/2010
                                                            8
ÆESEMPI

          Elenco dei simboli di un modulo
                                                      shell



„ Si utilizza la funzione dir() per elencare i
  simboli presenti all interno di un modulo
                     all'interno
import sys
dir(sys)
di (    )
„ Se invocata senza argomenti, la funzione dir()

  stampa gli oggetti definiti nell'/dall'interprete
„ Per “oggetti” si intende:
          gg
      „   funzioni (builtin e non)
      „   variabili (builtin e non)
      „   moduli

Linguaggi dinamici – A.A. 2009/2010
                                                         9
Package
„   Il package è un contenitore (namespace) di
    simboli (funzioni, variabili)
            (funzioni
      „   Tipicamente, ad un package corrisponde un file
          (non è sempre così)
„   Il compilatore del Python costruisce un
    namespace (contenitore di simboli) per
    ciascun modulo
      „   Namespace di default: package main (
          N              d f lt       k     i (contiene
                                                   ti
          le funzioni eseguite dal programma principale)
„   Namespace: sequenza di nomi separati dal
    carattere .

Linguaggi dinamici – A.A. 2009/2010
                                                           10
Struttura di un package
„   Ad una gerarchia di moduli rappresentata da
    un package corrisponde un insieme di file
    ordinati gerarchicamente in sottodirectory
„   Esempio: package gestore dei diversi formati
    sonori
      „   sound: modulo di base
               d      d l   b
      „   sound.formats: modulo di gestione dei formati
          (wav, aiff, au)
          (      iff    )
      „   sound.effects: modulo di gestione degli effetti
          (surround, reverse)
          (        d        )
      „   sound.filters: modulo di gestione dei filtri
          (equalizer, vocoder, karaoke)
Linguaggi dinamici – A.A. 2009/2010
                                                            11
Struttura di un package
„   __init__.py: file contenente il codice di
    inizializzazione di un modulo
     „   È presente nella directory che contiene il
         package
„   Ciascun modulo ha il suo __init__.py (che può
    anche essere vuoto)
„   L'uso di un __init__.py è obbligatorio, altrimenti il
    Python non riconosce i file della directory come
    appartenenti ad un package




Linguaggi dinamici – A.A. 2009/2010
                                                            12
Importazione di un package
„   Si usa il comando import
„   Per importare un modulo ben preciso:
    import sound.effect.echo
„   Ora, è possibile usare una funzione con di
    sound.effect.echo con il suo nome completo
     „ sound.effects.echo.echofilter(input, output,

       delay=0.7, atten=4)
„   Per evitare l'uso del nome completo, si usa l'altra
    variante di import:
    from sound.effects.echo import echofilter
               d ff t       h i       t h filt


Linguaggi dinamici – A.A. 2009/2010
                                                          13
Importazione di un package
„   Lo statement from sound.effect.echo import *
    permette di importare tutti i simboli da un
    package
„   Sfortunatamente,
    Sfortunatamente sui sistemi Windows tale
    operazione non funziona sempre come si
    vorrebbe
„   I nomi di file di Windows possono essere case
    insensitive
    i      iti
      „   ECHO.PY deve venire importato come echo,
          Echo
          E h oppure ECHO?


Linguaggi dinamici – A.A. 2009/2010
                                                     14
Importazione di un package
„   Per risolvere tale problema, si definisce una
    lista __all__ nel file __init__.py del modulo
            all              init py
„   Tale lista contiene i simboli esportati tramite
    uno statement from module import *
__all__ = ["echo", "surround", "reverse"]
„   Un'ultima nota: import non è ricorsivo!
      „   from sound.effects import * non importa anche i
          sottomoduli sound.effects.echo,
          sound.effects.surround, …
      „   Tali moduli vanno importati esplicitamente!


Linguaggi dinamici – A.A. 2009/2010
                                                            15
Moduli compilati
„   Se un programma importa molti moduli, questo
    può rallentare il tempo di avvio
„   Per questo, Python cerca di creare un file
    compilato ogni volta che si usa un modulo
„   File con estensione .pyc
     „   Contiene b t
         C ti     bytecode
                        d
     „   Indipendente dalla piattaforma!
„   Gestione flessibile
    G        f
     „   Se non c’è, si prova a crearlo
     „   Se non si riesce a creare, si usa il sorgente
„   NOTA: il tempo di esecuzione è lo stesso, si
                p                           ,
    risparmia sul caricamento
Linguaggi dinamici – A.A. 2009/2010
                                                         16
ÆESEMPI

                                      Tempi
                                               lot_mod.py




Linguaggi dinamici – A.A. 2009/2010
                                                      17

Contenu connexe

Tendances

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
 
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
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolarePyCon Italia
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaCristina Attori
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 

Tendances (20)

T7 librerie
T7 librerieT7 librerie
T7 librerie
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
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
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
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é
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
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
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in Java
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
Bash programming
Bash programmingBash programming
Bash programming
 
11 I File
11   I File11   I File
11 I File
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 

Similaire à Py t2 python-moduli

Similaire à Py t2 python-moduli (6)

Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
Funzioni
FunzioniFunzioni
Funzioni
 
T2 architettura
T2 architetturaT2 architettura
T2 architettura
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 
Corso Java
Corso JavaCorso Java
Corso Java
 
T6 codice
T6 codiceT6 codice
T6 codice
 

Plus de 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
 

Plus de 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 t2 python-moduli

  • 1. Parte 2 Programmazione modulare in Python Linguaggi dinamici – A.A. 2009/2010 1
  • 2. Introduzione „ Il primo passo verso una attività di programmazione che scali con il numero di righe di codice del software è l'isolamento de e u o a tà del so t a e delle funzionalità de software stesso „ Parti diverse del software „ “non si vedono” tra loro „ possono essere scritte indipendentemente da programmatori diversi di ersi „ possono essere cambiate concorrentemente „ Il Python supporta la modularizzazione tramite i package ed i moduli Linguaggi dinamici – A.A. 2009/2010 2
  • 3. Funzione „ Il Python mette a disposizione un meccanismo di definizione delle funzioni „ Parola chiave def „ Esempio: E i def fib(n): a, b = 0, 1 while b < n: print b, a, b = b, a + b b Linguaggi dinamici – A.A. 2009/2010 3
  • 4. ÆESEMPI Funzione fib.py fib2.py „ def deve essere seguito: „ dal nome della funzione „ dalla lista dei parametri (fra parentesi tonde), che vengono passati per valore (reference ad h ti l ( f d oggetti) „ dal d l corpo della funzione, opportunamente d ll f i t t indentato „ Il valore di ritorno è l i „ quello dell'ultima espressione valutata „ l'argomento dello statement return Linguaggi dinamici – A.A. 2009/2010 4
  • 5. ÆESEMPI Funzione default.py „ Possono essere specificati degli argomenti di default nelle funzioni „ Se non li esplicito, il loro valore è quello di default „ Si assegna il valore di default all'argomento nello statement di definizione della funzione def ask_ok(prompt, retries = 4, complaint = 'Yes or no, please!'): ) ... Linguaggi dinamici – A.A. 2009/2010 5
  • 6. Modulo „ Il modulo è l'unità di base per il riuso di codice „ Un modulo è un file contenente definizioni di variabili e funzioni „ Il file ha lo stesso nome del modulo ed il suffisso .py „ Ad esempio: file Foo.py „ All'interno del modulo, il nome del modulo , stesso è ottenibile tramite la variabile globale __ __name__ __ Linguaggi dinamici – A.A. 2009/2010 6
  • 7. ÆESEMPI Importazione dei simboli fibo.py „ Un modulo può importare le funzionalità di un altro modo „ Statement import name: cerca il modulo nel percorso dei moduli e ne importa i simboli „ Statement from name import lista: cerca il modulo nel percorso dei moduli e ne importa i simboli definiti nella lista „ Percorso dei moduli: „ Directory corrente „ Elenco di directory in PYTHONPATH „ Elenco di directory di sistema (/usr/lib/python2.6) Linguaggi dinamici – A.A. 2009/2010 7
  • 8. ÆESEMPI Uso di moduli come programmi fibo2.py „ Un modulo può essere usato come programma principale „ È necessario capire come si sta usando „ Uso del valore della variabile __name__ name „ Se è “__main__”, significa che lo stiamo usando come programma principale „ Se è diverso, vuole dire che è usato come modulo Linguaggi dinamici – A.A. 2009/2010 8
  • 9. ÆESEMPI Elenco dei simboli di un modulo shell „ Si utilizza la funzione dir() per elencare i simboli presenti all interno di un modulo all'interno import sys dir(sys) di ( ) „ Se invocata senza argomenti, la funzione dir() stampa gli oggetti definiti nell'/dall'interprete „ Per “oggetti” si intende: gg „ funzioni (builtin e non) „ variabili (builtin e non) „ moduli Linguaggi dinamici – A.A. 2009/2010 9
  • 10. Package „ Il package è un contenitore (namespace) di simboli (funzioni, variabili) (funzioni „ Tipicamente, ad un package corrisponde un file (non è sempre così) „ Il compilatore del Python costruisce un namespace (contenitore di simboli) per ciascun modulo „ Namespace di default: package main ( N d f lt k i (contiene ti le funzioni eseguite dal programma principale) „ Namespace: sequenza di nomi separati dal carattere . Linguaggi dinamici – A.A. 2009/2010 10
  • 11. Struttura di un package „ Ad una gerarchia di moduli rappresentata da un package corrisponde un insieme di file ordinati gerarchicamente in sottodirectory „ Esempio: package gestore dei diversi formati sonori „ sound: modulo di base d d l b „ sound.formats: modulo di gestione dei formati (wav, aiff, au) ( iff ) „ sound.effects: modulo di gestione degli effetti (surround, reverse) ( d ) „ sound.filters: modulo di gestione dei filtri (equalizer, vocoder, karaoke) Linguaggi dinamici – A.A. 2009/2010 11
  • 12. Struttura di un package „ __init__.py: file contenente il codice di inizializzazione di un modulo „ È presente nella directory che contiene il package „ Ciascun modulo ha il suo __init__.py (che può anche essere vuoto) „ L'uso di un __init__.py è obbligatorio, altrimenti il Python non riconosce i file della directory come appartenenti ad un package Linguaggi dinamici – A.A. 2009/2010 12
  • 13. Importazione di un package „ Si usa il comando import „ Per importare un modulo ben preciso: import sound.effect.echo „ Ora, è possibile usare una funzione con di sound.effect.echo con il suo nome completo „ sound.effects.echo.echofilter(input, output, delay=0.7, atten=4) „ Per evitare l'uso del nome completo, si usa l'altra variante di import: from sound.effects.echo import echofilter d ff t h i t h filt Linguaggi dinamici – A.A. 2009/2010 13
  • 14. Importazione di un package „ Lo statement from sound.effect.echo import * permette di importare tutti i simboli da un package „ Sfortunatamente, Sfortunatamente sui sistemi Windows tale operazione non funziona sempre come si vorrebbe „ I nomi di file di Windows possono essere case insensitive i iti „ ECHO.PY deve venire importato come echo, Echo E h oppure ECHO? Linguaggi dinamici – A.A. 2009/2010 14
  • 15. Importazione di un package „ Per risolvere tale problema, si definisce una lista __all__ nel file __init__.py del modulo all init py „ Tale lista contiene i simboli esportati tramite uno statement from module import * __all__ = ["echo", "surround", "reverse"] „ Un'ultima nota: import non è ricorsivo! „ from sound.effects import * non importa anche i sottomoduli sound.effects.echo, sound.effects.surround, … „ Tali moduli vanno importati esplicitamente! Linguaggi dinamici – A.A. 2009/2010 15
  • 16. Moduli compilati „ Se un programma importa molti moduli, questo può rallentare il tempo di avvio „ Per questo, Python cerca di creare un file compilato ogni volta che si usa un modulo „ File con estensione .pyc „ Contiene b t C ti bytecode d „ Indipendente dalla piattaforma! „ Gestione flessibile G f „ Se non c’è, si prova a crearlo „ Se non si riesce a creare, si usa il sorgente „ NOTA: il tempo di esecuzione è lo stesso, si p , risparmia sul caricamento Linguaggi dinamici – A.A. 2009/2010 16
  • 17. ÆESEMPI Tempi lot_mod.py Linguaggi dinamici – A.A. 2009/2010 17