Lezioni di Python – 3.7 Moduli

Lezioni di Python - 3.7 I moduli

Moduli

I moduli sono parti di codice scritti da altri programmatori che svolgono funzioni che possono essere utili in molti casi, quindi riutilizzabili in altri codici. Ognuno di questi moduli generalmente svolge una serie di operazioni specializzate in un determinato campo che possono utili da riutilizzare senza ogni volta dover riscrivere il codice da capo.

Anzi a volte questi moduli sono così complessi che forniscono quindi un buon sistema per evitare di perdersi nella risoluzione di algoritmi complicati che sono stati già implementati da altri.

Ogni modulo quindi mette a disposizione una serie di funzioni che per essere utilizzare necessitano l’importazione del modulo. Questo si può fare grazie alla clausola import.

import nomemodulo

Per esempio esiste un modulo che permette di gestire in numeri casuali chiamato random. Questo modulo mette a disposizione una serie di strumenti tra cui la generazione di numeri casuali. Se nella creazione del nostro codice abbiamo bisogno di generare dei numeri casuali possiamo semplicemente importare il modulo random e poi utilizzare la sua funzione randint().

Generiamo per esempio 1o numeri casuali che vanno da 1 a 100

import random
for i in range(10):
     print(random.randint(1,100))

Eseguiamo

>>>
16
53
63
65
28
84
61
58
37
77

Abbiamo ottenuto in modo davvero semplice 10 numeri casuali.

Importare una singola funzione da un modulo

A volte abbiamo bisogno solo di una determinata funzione di un modulo. E’ possibile quindi importarla da un modulo usando la clausola from.

from modulo import nomefunzione

E poi effettuare la chiamata della funzione in questo modo

modulo.nomefunzione

Nel caso del generatore di numeri casuali avremmo potuto scrivere così: from random import randint
for i in range(10):
print(randint(1,100))

Come puoi vedere, in questo caso, non c’è più bisogno di specificare il nome del modulo durante la chiamata alla funzione.

Inoltre è possibile importare più funzioni (o ogggetti) dallo stesso modulo, basta metterle in sequenza separate da una virgola.

from modulo import nomefunzione1, nomefunzione2, nomefunzione3

Importare tutti gli oggetti da un modulo

Spesso ti potrà capitare di vedere il caso seguente

1) from modulo import *

con questo comando (non genera errore) tutte le funzioni e gli oggetti appartenenti ad un modulo vengono importati.  Ma che differenza c’è rispetto al comando seguente?

2) import modulo

Bene il primo caso le chiamate delle funzioni non richiedono il nome del modulo da cui derivano. A differenza del secondo caso in cui invece le chiamate delle funzioni richiedono in modo esplicito di essere referenziale al modulo di apparentenenza

1) nomefunzione()

2) nomemodulo.nomefunzione()

Ma il primo caso, cioè il caso 1 (anche se funziona), non è corretto poichè potrebbe accadere che diversi moduli abbiano funzioni con lo stesso nome, e quindi l’ultimo modulo importato andrà a sovrascrivere oggetti e funzioni con lo stesso nome dei moduli precedenti, creando scompiglio e confusione durante l’esecuzione del codice.

Si raccomanda quindi di seguire sempre il metodo 2 se si vuole importare un modulo nella sua interessa.

Importare un modulo tramite alias

Abbiamo appena visto che per utilizzare una chiamata ad funzione di un modulo è necessario referenziarla al modulo stesso. A volte alcuni moduli hanno però un nome davvero troppo lungo e riportarlo numerose volte nel codice può essere davvero tedioso. Un metodo semplice per ovviare a questo problema è importare un modulo tramite un alias di pochi caratteri, e per farlo si usa la clausola as. Da quel momento in poi le chiamate alle funzioni verranno referenziate all’alias invece che al nome del modulo originale.

Quindi invece di scrivere la chiamata alla funzione nel modo seguente

questonomedimodulodavverolungo.nomefunzione()

si potrà risolvere scrivendo in questo modo

import questonomedimodulodavverolungo as qm

qm.nomefunzione()

⇐ Vai a Lezione 3.6 – Funzioni come oggetti

Vai a Lezione 3.8 – La libreria standard e pip 

Lascia un commento