Programmazione.html.it

  Home page

   Guida Base

   Guida al Java

   Guida al C

   Guida al C++

   Guida al Delphi

   Guida a VB .NET

   Guida al Visual Basic

   Guida al Python

   Guida al'UML

  Forum di discussione
  HTML.it




Guida a Python
  LEZIONE 13:  Moduli


Perche' esistono i moduli e cosa sono

Quando si inizia a diventare programmatori esperti, i programmi crescono a vista d'occhio e diventa estremamente difficile gestire l'intero programma in un unico file di script.
Per questo è opportuno suddividere il programma in diversi files di script. Questo metodologia permette di creare delle raccolte di funzioni che possono essere utilizzate in progetti diversi.
I moduli quindi sono dei files di script (files con estensione "PY") che possono essere richiamati da altri programmi python per riutilizzare le funzioni contenute in essi.
I moduli possono essere creati facilmente dal programmatore, ma ne esistono moltissimi gia' precostruiti e contenuti dentro alla installazione di python. Essi in genere raccolgono funzioni utili per risolvere svariate problematiche, per esempio:
  • moduli per la gestione delle stringhe,
  • moduli per le chiamate alle funzioni del sistema operativo,
  • moduli per la gestione di internet,
  • moduli per la posta elettronica ecc...
Inoltre, una possibilità da non sottovalutare, è rappresentata dall'utilizzo di moduli scritti da terzi fornitori.
Navigando in internet è possibile trovare moduli di python che risolvono ogni sorta di problema; molti di essi, in pieno stile open source, sono di utilizzo gratuito e coperti da licenza GPL.

Come utilizzare i moduli

Per scrivere un modulo, basta semplicemente creare un file con estensione PY e riempirlo con tutte le funzioni necessarie al modulo stesso.
Per utilizzare il modulo appena creato è sufficiente importarlo con il comando "import". Ad esempio, supponendo di aver creato il modulo "libreria.py", basta scrivere in cima al programma:

import libreria

Dopo aver importato il modulo possiamo semplicemente richiamare le funzioni contenute in esso utilizzando la dot notation.
Digitando il nome del modulo, un punto e il nome della funzione riusciamo ad entrare nel modulo e richiamare la funzione desiderata.
Ad esempio, supponendo che "libreria.py" contenga le funzioni apri(), chiudi() e sposta(oggetto), posso richiamare le funzioni nel seguente modo:

import libreria

libreria.apri()
ogg=5
libreria.sposta(ogg)
libreria.chiudi()

Se non si desidera utilizzare il nome della libreria tutte le volte che si richiama una funzione, è possibile importare anche i nomi delle funzioni direttamente.
Ad esempio, per importare la funzione sposta(oggetto):

import libreria
from libreria import sposta

libreria.apri()
ogg=5
sposta(ogg)
libreria.chiudi()

In questo caso la funzione sposta viene a far parte dell'insieme dei nomi definiti nel programma (namespace), e non necessita' più del prefisso del nome del modulo (libreria).
Se si desidera importare tutti i nomi delle funzioni di "libreria.py" all'interno del programma basta utilizzare il carattere asterisco:

from libreria import *

apri()
ogg=5
sposta(ogg)
chiudi()

Bisogna considerare un altro vantaggio offerto dai moduli: quando si interpreta un programma python, esso crea per ogni modulo una versione "semicompilata" in un linguaggio intermedio più veloce (bytecode).
Dopo una esecuzione, è possibile notare la presenza di tanti files con estensione PYC (Python compiled). Ogni file ha lo stesso nome del sorgente PY, ma con estensione PYC.
In questo modo python non deve interpretare il codice tutte le volte, ma solamente quando viene effettuata una modifica. L'interprete confronta ogni volta la data e l'ora del file PY con il file PYC, se sono diverse interpreta il codice, altrimenti esegue direttamente il bytecode.
Questo meccanismo, peraltro usato ormai da molti linguaggi, permette di aumentare notevolmente la velocita' del codice.

Moduli predefiniti

Python è dotato di una raccolta di moduli standard molto vasta. Per utilizzare tali moduli è necessario solamente importarli come abbiamo visto in precedenza.
Vediamo alcuni moduli standard di notevole importanza:
  • string: modulo che raccoglie funzioni per gestire le stringhe, ad esempio:
    • funzioni per la conversione da stringa a numero
    • funzioni per la conversione da minuscolo a maiuscolo
    • funzioni per la sostituzioni di pezzi di stringhe
  • sys: modulo che raccoglie funzioni per reperire informazioni di sistema, ad esempio reperire gli argomenti passati sulla linea di comando.
  • os: modulo per eseguire operazioni del sistema operativo sottostante, ad esempio copiare, rinominare o cancellare un file.
Nella documentazione inclusa con python si trova l'elenco completo di tutti i moduli predefiniti.

I Namespaces

Per capire meglio il concetto della importazione dei nomi delle funzione bisogna parlare del concetto di namespace (termine gia' introdotto in precedenza).
Ogni modulo ha un insieme di nomi (nomi di variabili e nomi di funzioni) che rappresentano i nomi utilizzabili all'interno di esso. Questo insieme viene detto namespace (spazio dei nomi).
Per trasportare i nomi da un namespace ad un altro si può usare il comando import che abbiamo visto.
Mediante la funzione dir() è possibile vedere l'elenco dei nomi presenti nel namespace corrente.

>>> dir()
['__builtins__', '__doc__', '__name__']

Questi nomi, mostrati sopra, sono nomi definiti dall'interprete prima di cominciare. Se io importo il modulo libreria ottengo il seguente risultato:

>>> from libreria import *
>>> dir()
['__builtins__', '__doc__', '__name__', 'apri', 'chiudi', 'sposta']

Come si intuisce, adesso tutte le funzioni contenute in libreria.py fanno parte del namespace.

Il concetto di namespace si applica anche alle funzioni, quando si entra in una funzione viene creato un nuovo namespace, ecco perché non sono più visibili le variabili precedenti, ma solo le variabili locali alla funzione stessa.






Torna a inizio pagina