1.1 Introduzione ai moduli
Un modulo in Python è un file con estensione .py che contiene codice. I moduli permettono di suddividere un grande codice in parti più piccole e gestibili. Ogni modulo può contenere funzioni, classi e variabili, oltre a eseguire un certo codice al momento dell'importazione.
Esempio di un semplice modulo
Creiamo un modulo mymodule.py
:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Ora questo modulo può essere importato e utilizzato in un altro file.
1.2 Importazione dei moduli
Python offre diversi modi per importare i moduli. Analizziamoli uno per uno.
Importazione dell'intero modulo
Il sintassi generale di questa operazione è:
import modulo
Questo metodo importa l'intero modulo e puoi usare le sue funzioni e variabili specificando il nome del modulo.
import modulo
print(modulo.greet("Alice")) # Output: Hello, Alice!
print(modulo.pi) # Output: 3.14159
Abbiamo già fatto qualcosa di simile con il modulo math
, ricordi?
import math
print(math.ceil(13 / 7)) # arrotondamento verso l'alto
print(math.floor(13 / 7)) # arrotondamento verso il basso
Importazione di elementi specifici dal modulo
Puoi importare non tutto ciò che c'è nel modulo, ma solo alcuni suoi elementi. Il sintassi generale di questa operazione è:
from modulo import func, var
Questo metodo importa solo funzioni, classi o variabili specifiche dal modulo, il che ti permette di usarle senza specificare il nome del modulo.
from mymodule import greet, pi
print(greet("Bob")) # Output: Hello, Bob!
print(pi) # Output: 3.14159
Importazione del modulo con un alias
Il sintassi generale di questa operazione è:
import modulo as alias
Questo metodo permette di importare un modulo e assegnargli un altro nome, il che può essere utile per abbreviare nomi di moduli lunghi o per risolvere conflitti di nomi.
import mymodule as mm
print(mm.greet("Charlie")) # Output: Hello, Charlie!
print(mm.pi) # Output: 3.14159
Importazione di tutti gli elementi dal modulo
Il sintassi generale di questa operazione è:
from modulo import *
Questo metodo importa tutte le funzioni, le classi e le variabili dal modulo, il che permette di usarle senza specificare il nome del modulo. Tuttavia, l'uso di questo metodo non è consigliato, poiché può causare conflitti di nomi e rendere difficile la lettura del codice.
from mymodule import *
print(greet("Dave")) # Output: Hello, Dave!
print(pi) # Output: 3.14159
1.3 Sotto il cofano del processo di importazione
Ordine di ricerca dei moduli
Quando importi un modulo, Python lo cerca in un ordine specifico:
- La directory corrente: Python cerca prima il modulo nella directory corrente da cui è stato eseguito lo script.
-
Variabile d'ambiente
PYTHONPATH
: Se il modulo non viene trovato nella directory corrente, Python lo cerca nelle directory indicate nella variabile d'ambientePYTHONPATH
. -
Directory standard: Se il modulo non viene ancora trovato, Python lo cerca nelle directory standard, come le directory indicate in
sys.path
.
Esempio:
import sys
for path in sys.path:
print(path)
Importazione locale e globale
L'importazione dei moduli può essere eseguita sia a livello globale (all'inizio del file) che a livello locale (all'interno di una funzione o di un metodo).
Importazione globale
L'importazione globale viene eseguita all'inizio del file e rende il modulo importato disponibile in tutto il file.
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
Importazione locale
L'importazione locale viene eseguita all'interno di una funzione o di un metodo e rende il modulo importato disponibile solo in quella funzione o metodo.
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
L'importazione locale può essere utile per ridurre il tempo di caricamento del modulo o per prevenire conflitti di nomi.
1.4 Importazione dinamica
L'importazione dinamica permette di importare i moduli durante l'esecuzione del programma. Questo può essere utile quando è necessario importare moduli in base all'input dell'utente o altre condizioni dinamiche.
Il sintassi generale di questa operazione è:
module = __import__("modulo")
Per esempio, importiamo il modulo math
in questo modo.
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # Output: 4.0
Lavorare con il codice successivo è simile all'uso di import as
, quando al modulo math
viene assegnato un alias module
.
1.5 Accesso agli attributi del modulo usando la funzione getattr
La funzione getattr
permette di ottenere dinamicamente attributi da un modulo (o qualsiasi oggetto). Può essere utile nei casi in cui i nomi degli attributi non sono noti in anticipo o possono cambiare durante l'esecuzione del programma.
Sintassi della funzione getattr
:
getattr(object, name, default = None)
Dove object
è l'oggetto da cui ottenere l'attributo, name
: è una stringa che contiene il nome dell'attributo, e default
: è il valore restituito nel caso in cui l'attributo con il nome specificato non esista. Il valore predefinito per il parametro default
è None
.
Esempio di utilizzo della funzione getattr
:
import math
# Otteniamo l'attributo sqrt dal modulo math
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # Output: 5.0
# Tentiamo di ottenere un attributo inesistente, restituiamo il valore predefinito
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # Output: default_value
In questo esempio usiamo la funzione getattr
per ottenere
la funzione sqrt
dal modulo math
, quindi invochiamo questa
funzione per calcolare la radice quadrata del numero 25. Nel caso in cui l'attributo con
il nome specificato non esista, viene restituito il valore predefinito
default_value
.
GO TO FULL VERSION