back to top

I moduli in Python

In Python un modulo è essenzialmente un file che contiene del codice scritto in questo linguaggio. I moduli sono caratterizzati dall’estensione ".py", quindi al file "istruzione.py" corrisponderà il nome modulo "istruzione". Lo scopo dei moduli è duplice: essi contengono istruzioni e definizioni che possono essere riutilizzate quante volte si vuole senza la necessità di doverle riscrivere, basterà "importare" i moduli dove necessari; inoltre, si rivelano particolarmente comodi per gestire facilmente grandi quantità di codice.

Creazione di un modulo

La procedura di creazione di un modulo si riassume nella scrittura del codice che esso è destinato a contenere e nel salvataggio del file con estensione ".py. Per quanto riguarda la sintassi da utilizzare le regole sono quelle viste fino ad ora, quindi un modulo potrebbe contenere, ad esempio, un codice come questo, destinato a svolgere una semplice moltiplicazione tramite una funzione ("mul()") a cui passare come parametri 2 fattori:

# Definire il codice di un modulo
def mul(x, y):
  """Semplice applicazione che moltiplica
  2 valori e restituisce il risultato"""

  prodotto = x * y
  return prodotto

Una volta salvato il codice in un file, che chiameremo per esempio "app.py", avremo a disposizione un modulo importabile all’interno di qualsiasi programma.

Importazione di un modulo

Per importare un modulo si deve utilizzare la keyword import seguita dal nome del modulo e non da quello del file che lo rappresenta, quindi omettendo l’estensione ".py"; fatto questo le istruzioni in esso presenti diventeranno disponibili per l’applicazione nella quale è stato importato. Dunque, nel caso del modulo precedentemente creato, dovremo far ricorso ad una sintassi come la seguente:

# Importazione di un modulo
>>> import app

Dopo l’importazione, per utilizzare le istruzioni contenute nel modulo dovremo eseguire un’operazione che tecnicamente consiste nell’introdurre i nomi delle funzioni definite in "app" nella tabella dei simboli corrente. Si tratta in pratica di rendere utilizzabili le funzioni del modulo, cosa possibile concatenando il nome del modulo alla funzione desiderata tramite il già noto operatore ".". Nel nostro caso il modulo "app" presenta unicamente la funzione "mul()" che richiameremo in questo modo:

# Importazione di un modulo e chiamata alla funzione
>>> import app
>>> app.mul(6,5)
30

Un modo efficiente di gestire i moduli è quello di rinominarli con lo scopo di risparmiare tempo nella digitazione del codice. "App" potrebbe essere per esempio rinominato in "a" in questo modo grazie alla clausola as:

# Importare e rinominare un modulo 
>>> import app as a

Si faccia però attenzione, perché una volta rinominato un modulo il nuovo nome dovrà essere utilizzato anche nella chiamata alle funzioni, diversamente Python produrrà un errore non riconoscendo più il nome iniziale del modulo:

# Richiamare funzioni di un modulo rinominato
>>> import app as a
>>> app.mul(8,4)
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    app.mul(8,4)
NameError: name 'app' is not defined
>>> a.mul(8,4)
32

Gestire le chiamate alle istruzioni

Un modulo può contenere numerose istruzioni e definizioni, può quindi capitare che non vi sia la necessità di importarlo per intero, richiamandone soltanto alcuni elementi. Per far questo utilizzeremo la parola chiave from seguita dal nome del modulo e da "import" seguito a sua volta dal nome del costrutto che desideriamo importare. Se il nostro modulo contenesse più istruzioni e volessimo importare soltanto la funzione "mul()" dovremmo quindi procedere come segue:

# Importare una sola funzione di un modulo 
>>> from app import mul
>>> mul(3,5)
15

Si noti come in questo caso sia possibile utilizzare la funzione senza la necessità di concatenarne il nome a quello del modulo.

Nel caso in cui si vogliano importare più istruzioni di un modulo escludendone altre basterà utilizzare il costrutto visto in precedenza, dove i nomi delle istruzioni scelte andranno separati con una virgola:

# Importartazione multipla di istruzioni da un modulo 
>>> from app import mul, seconda_istruzione, terza_istruzione

Moduli standard in Python

Per comodità degli sviluppatori Python prevede un gran numero di moduli standard, sostanzialmente dei moduli forniti nativamente dal linguaggio per svolgere le operazioni più svariate. Questi moduli sono importabili tramite la stessa sintassi utilizzabile per i moduli definiti dagli utenti.

Per proporre un esempio possiamo prendere in considerazione il modulo calendar, come suggerisce il nome si tratta di una soluzione che consente di gestire calendari tramite dei metodi dedicati, anch’essi forniti nativamente da Python. Come impostazione predefinita, seguendo la cosiddetta "convenzione europea" "calendar" prevede che il primo giorno della settimana sia il lunedì (associato all’indice "0") con domenica come ultimo giorno (indice "6"). Per verificare quanto detto è possibile importare il modulo e poi richiamare il metodo firstweekday() che mostra in output l’indice relativo al primo giorno della settimana:

# Importazione del modulo calendar e visualizzazione dell'indice
# del primo giorno della settimana 
>>> import calendar
>>> calendar.firstweekday()
0

Volendo modificare l’impostazione di default è possibile ricorrere ad un altro metodo, setfirstweekday(), che accetta come parametro l’indice del giorno della settimana con cui si vuol far cominciare la settimana. Nel caso in cui la scelta dovesse ricadere sulla domenica, seguendo una convenzione usuale in Paesi come gli Stati Uniti, dovremmo procedure nel modo seguente:

# Importazione del modulo calendar e modifica dell'indice
# del primo giorno della settimana 
>>> import calendar
>>> setfirstweekday(6)
>>> calendar.firstweekday()
6

Così come i moduli definiti dagli utenti anche i moduli standard possono essere rinominati. Nello stesso modo è possibile importare soltanto parti specifiche di un modulo o tutte le definizioni e le istruzioni che lo compongono.

Pubblicità
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.