Successfully reported this slideshow.

Py t2 python-moduli

692 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Py t2 python-moduli

  1. 1. Parte 2 Programmazione modulare in Python Linguaggi dinamici – A.A. 2009/2010 1
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 17. ÆESEMPI Tempi lot_mod.py Linguaggi dinamici – A.A. 2009/2010 17

×