Python importazioni di moduli dalla libreria standard esterni e propri
Autore:[Antonio Gallonetto]
Python ha una vastissima libreria di funzionalità scritte dagli utenti e sviluppatori utilissima per agevolarci nel creare i nostri programmi.
Il vantaggio di avere una libreria con le funzionalità che ci servono, è che quest’ultima è in continuazione sviluppata estesa e manutenuta e non deve essere di volta scritta controllata, modificata, verificati eventuali risultati inattesi. Tutto questo lavoro è già stato fatto, quindi usare le funzionalità già scritte per lo sviluppatore è più veloce e sicuro.
Sintassi per l’importazione di un modulo
import nomeModulo
import nomeModulo as nomeAlias
from nomeModulo import nomeFunzione1 nomeFunzione2 nomeFunzionen
from nomeModulo import *
import nomeModulo
In questo caso il linguaggio importa l’intera libreria delle funzionalità
import nomeModulo ad nomeAlias
Possiamo associare un nome più facile da ricordare o più compatto da richiamare usando un alias.
Esempio di uso di un alias
import time as lib_time
in questo caso associamo alla libreria il nome lib_time.
Potrei fare una cosa di questo tipo perché magari uso la convenzione che tutte le librerie che vado ad usare iniziano per lib_, in questo modo quando andrò a richiamare un metodo della libreria time riporterò lib_time.nome_metodo.
Il codice risulta più leggibile e so già che time è un modulo esterno.
from nomeModulo import nomeFunzione1 nomeFunzione2 nomeFunzionen
In questo caso non mi servono tutte le funzionalità del modulo e vado ad importare solo quelle che mi servono.
from nomeModulo import *
In questo caso python importa tutti gli elementi della libreria nomeModulo tranne quelli che iniziano con un underscore _
.
Questa funzionalità è poco usata perché rende il codice poco leggibile.
Un modulo contiene funzionalità e una parte di esecuzione
La parte di esecuzione del modulo è quella di inizializzazione e di creazione degli oggetti, in molti casi senza questa parte le funzionalità non possono essere eseguite.
Richiamare le funzionalità di un modulo
nomeModulo.funzionalità oppure nomeAlias.funzionalità
Dove cerca Python i moduli
Inizia dalla directory corrente dello script che andiamo ad eseguire e poi nei percorsi elencati da sys.path.
Per visualizzare i nostri percorsi possiamo digitare
import sys
print(sys.path)
Possiamo aggiungere un percorso di ricerca con:
import sys
sys.path.append("Percorso da aggiungere")
Creare e importare i nostri moduli
Un buon metodo di programmazione è cercare di separare le funzionalità dalle chiamate vere e proprie perché questa pratica favorisce la portabilità e il riutilizzo del codice.
Per esempio se ho una serie di funzionalità che verificano le varie parti del codice fiscale, le inserirò in un modulo a parte e poi andrò a richiamarle nel programma vero e proprio dopo aver importato il modulo.
Il nostro interprete le cerca nella stessa cartella dello script se vogliamo usare una sottocartella dobbiamo usare la funzione sys.path.append(“Percorso da aggiungere”)
Esempio di importazione di un modulo in una sottocartella
Ho creato la cartella funzioni dove mettere i vari files con le funzioni. Di seguito un esempio di importazione del modulo fun_len_str nella cartella funzioni.
##lunghezza stringa
import os
abs_path=os.getcwd()
## abs_path contiene il percorso assoluto corrente
import sys
sys.path.append(abs_path+"/funzioni")
## aggiungo al percorso di ricerca il percorso assoluto di funzioni
import fun_len_str as my_fun
my_string = input("Inserisci la stringa da visualizzare la lunghezza: ")
my_fun.len_str(my_string)
Esempio precedente reso indipendente dal sistema operativo
In questo esempio cerchiamo di rende il nostro codice indipendente dalla piattaforma sulla quale sta girando anche se Python cerca comunque di mettere apposto le cose e l’esempio di prima funziona anche su Windows anche se i percorsi sono indicati in modo diverso.
import os
abs_path=os.getcwd()
dir_to_include="funzioni"
if '\\' in abs_path:
newPath=abs_path+"\\"+dir_to_include
else:
newPath=abs_path+"/"+dir_to_include
import sys
sys.path.append(newPath)
import fun_len_str as my_fun
my_string = input("Inserisci la stringa da visualizzare la lunghezza: ")
my_fun.len_str(my_string)
In questo caso sfrutto il fatto che windows indica le directory con \
mentre linux e mac con /
per identificare il sistema operativo e rendere portabile il mio codice.
Visualizzare i metodi presenti in un modulo
Il comando per visualizzare i nomi dei metodi presenti in un modulo è dir(nomeModulo)
, è necessario importare il modulo prima di poter dare questo comando.
Questo comando visualizzerà il nostro metodo e quelli ereditati dall’oggetto padre, nel nostro caso il risultato è:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'len_str']
Ulteriori informazioni sul modulo
Per avere un ulteriore aiuto su dei metodi di un modulo importato o sul modulo stesso si piò usare la funzione help.
Sintassi: help(nomeModulo) oppure help(nomeModulo.nomeMetodo)