SlideShare a Scribd company logo
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

More Related Content

PDF
Py t1 python-intro
PDF
Py t3 python-oggetti
PDF
Py a2 python-documentazione
PDF
Py a3 python-metaprogramming
PDF
Py a4 python-file
PDF
Py a6 python-database
PDF
2006 Py04 avanzato
PDF
Pe t3 perl-moduli
Py t1 python-intro
Py t3 python-oggetti
Py a2 python-documentazione
Py a3 python-metaprogramming
Py a4 python-file
Py a6 python-database
2006 Py04 avanzato
Pe t3 perl-moduli

What's hot (20)

PDF
T7 librerie
PDF
2006 Py03 intermedio
PDF
Pe t2 perl-caratteristiche
PPT
Inferno Limbo Italian
PDF
Pe a3 perl-metaprogramming
PDF
2006 Py01 intro
PDF
Pe t1 perl-intro
PPTX
2011.02.19 Introducing F#
PDF
Pe t4 perl-oggetti
PPTX
Scala: come recuperare la programmazione funzionale e perché
PPTX
Python@Unina - Theory
PDF
T3 esempio runtime
PDF
MS_corso base iOS iPhone_partI
KEY
Corso Iphone in 48h
PDF
Spyppolare o non spyppolare
PDF
Programmazione funzionale e Stream in Java
PDF
X-NERVal e Component NER
PPTX
Caratteristiche del linguaggio c
PDF
Bash programming
PPT
11 I File
T7 librerie
2006 Py03 intermedio
Pe t2 perl-caratteristiche
Inferno Limbo Italian
Pe a3 perl-metaprogramming
2006 Py01 intro
Pe t1 perl-intro
2011.02.19 Introducing F#
Pe t4 perl-oggetti
Scala: come recuperare la programmazione funzionale e perché
Python@Unina - Theory
T3 esempio runtime
MS_corso base iOS iPhone_partI
Corso Iphone in 48h
Spyppolare o non spyppolare
Programmazione funzionale e Stream in Java
X-NERVal e Component NER
Caratteristiche del linguaggio c
Bash programming
11 I File
Ad

Similar to Py t2 python-moduli (6)

PDF
Pe a2 perl-documentazione
PPTX
Funzioni
PDF
T2 architettura
PDF
Sviluppare su OpenOffice.org con Java
PPT
PDF
T6 codice
Pe a2 perl-documentazione
Funzioni
T2 architettura
Sviluppare su OpenOffice.org con Java
T6 codice
Ad

More from Majong DevJfu (20)

PDF
9 - Architetture Software - SOA Cloud
PDF
8 - Architetture Software - Architecture centric processes
PDF
7 - Architetture Software - Software product line
PDF
6 - Architetture Software - Model transformation
PDF
5 - Architetture Software - Metamodelling and the Model Driven Architecture
PDF
4 - Architetture Software - Architecture Portfolio
PDF
3 - Architetture Software - Architectural styles
PDF
2 - Architetture Software - Software architecture
PDF
1 - Architetture Software - Software as a product
PDF
10 - Architetture Software - More architectural styles
PDF
PDF
PDF
4 (uml basic)
POT
Tmd template-sand
PPT
26 standards
9 - Architetture Software - SOA Cloud
8 - Architetture Software - Architecture centric processes
7 - Architetture Software - Software product line
6 - Architetture Software - Model transformation
5 - Architetture Software - Metamodelling and the Model Driven Architecture
4 - Architetture Software - Architecture Portfolio
3 - Architetture Software - Architectural styles
2 - Architetture Software - Software architecture
1 - Architetture Software - Software as a product
10 - Architetture Software - More architectural styles
4 (uml basic)
Tmd template-sand
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