Moduli
Perché ti serve questo?
Section titled “Perché ti serve questo?”Immagina di dover scrivere un programma grande. Mettere tutto il codice in un unico file lungo migliaia di righe sarebbe un disastro — impossibile da leggere o da modificare.
I moduli sono il modo in cui Python ti permette di suddividere il codice in file separati, organizzati per argomento. Ogni file .py è già un modulo. E Python viene fornito con centinaia di moduli già pronti da usare — la cosiddetta libreria standard.
Importare un modulo con import
Section titled “Importare un modulo con import”Per usare un modulo, devi “importarlo” all’inizio del tuo file:
import math # Importa il modulo "math" (matematica)
print(math.pi) # 3.141592653589793 — il pi grecoprint(math.sqrt(16)) # 4.0 — radice quadrataprint(math.floor(3.7)) # 3 — arrotondamento verso il bassoprint(math.ceil(3.2)) # 4 — arrotondamento verso l'altoQuando scrivi math.sqrt, stai dicendo: “usa la funzione sqrt che si trova nel modulo math”.
Importare solo quello che ti serve con from ... import
Section titled “Importare solo quello che ti serve con from ... import”Se sai già quali funzioni ti servono, puoi importarle direttamente. Così non devi scrivere il nome del modulo ogni volta:
from math import pi, sqrt, floor # Importo solo queste tre cose
print(pi) # 3.141592653589793print(sqrt(25)) # 5.0print(floor(4.9)) # 4from math import * — sconsigliato
Section titled “from math import * — sconsigliato”Si può importare tutto in una volta con *, ma è una cattiva abitudine:
from math import * # Importa TUTTO dal modulo math
print(sin(0)) # Funziona, ma...Il problema: non si capisce più da dove vengono le funzioni. Se due moduli hanno una funzione con lo stesso nome, una sovrascrive l’altra senza avvertirti.
Rinominare con as
Section titled “Rinominare con as”Puoi dare un soprannome a un modulo o a una funzione con la parola as. Utile se il nome è lungo o se vuoi evitare conflitti:
import math as m # D'ora in poi scrivo "m" invece di "math"print(m.pi) # 3.14159...
from math import sqrt as radice_quadrata # Rinomino la funzioneprint(radice_quadrata(9)) # 3.0Alcune librerie molto usate hanno soprannomi convenzionali che tutti usano:
import numpy as np # Convenzione universale per NumPyimport pandas as pd # Convenzione universale per PandasCreare il tuo modulo
Section titled “Creare il tuo modulo”Un modulo è semplicemente un file .py. Crea un file chiamato calcolatrice.py:
# calcolatrice.py — il mio modulo personale
def somma(a, b): return a + b
def sottrai(a, b): return a - b
def moltiplica(a, b): return a * b
pi = 3.14159Poi in un altro file nella stessa cartella:
# main.py — uso il mio moduloimport calcolatrice
print(calcolatrice.somma(3, 4)) # 7print(calcolatrice.pi) # 3.14159Il blocco if __name__ == "__main__"
Section titled “Il blocco if __name__ == "__main__"”Quando Python importa un modulo, esegue tutto il codice al suo interno. Questo può causare problemi se hai del codice di test che non vuoi far girare durante l’importazione.
La soluzione è racchiudere il codice di test in questo blocco speciale:
def somma(a, b): return a + b
if __name__ == "__main__": # Questo viene eseguito SOLO se avvii calcolatrice.py direttamente # NON viene eseguito se qualcuno fa "import calcolatrice" print(somma(3, 4)) # TestRegola semplice: __name__ == "__main__" è True solo per il file che hai avviato tu, non per quelli importati.
Moduli utili già inclusi in Python
Section titled “Moduli utili già inclusi in Python”| Modulo | A cosa serve |
|---|---|
math | Funzioni matematiche (radici, trigonometria, logaritmi) |
random | Numeri casuali |
datetime | Date e orari |
os | Interazione con il sistema operativo (file, cartelle) |
json | Leggere e scrivere file JSON |
re | Espressioni regolari (ricerche avanzate nel testo) |
time | Misurare il tempo, mettere in pausa il programma |
Il modulo random — numeri casuali
Section titled “Il modulo random — numeri casuali”import random
print(random.random()) # Numero decimale casuale tra 0.0 e 1.0print(random.randint(1, 10)) # Numero intero casuale tra 1 e 10 (inclusi)print(random.choice(["mela", "banana", "uva"])) # Sceglie un elemento a caso dalla lista
lista = [1, 2, 3, 4, 5]random.shuffle(lista) # Mescola la lista (modifica la lista originale)print(lista) # Ordine casuale, es: [3, 1, 5, 2, 4]Il modulo os — interazione con il sistema
Section titled “Il modulo os — interazione con il sistema”import os
print(os.getcwd()) # Mostra in quale cartella ti trovi oraprint(os.listdir(".")) # Elenca i file nella cartella correnteprint(os.path.exists("file.txt")) # True se il file esiste, False altrimenti