Moduli
A cosa servono i moduli
Sezione intitolata “A cosa servono i moduli”In un programma grande, mettere tutto il codice in un unico file lo rende difficile da leggere e modificare.
I moduli permettono di dividere il codice in file separati, organizzati per argomento. Ogni file .py è un modulo. Python include inoltre centinaia di moduli pronti nella libreria standard.
Importare un modulo con import
Sezione intitolata “Importare un modulo con import”Per usare un modulo, importalo all’inizio del 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'altomath.sqrt indica la funzione sqrt contenuta nel modulo math.
Importare solo quello che ti serve con from ... import
Sezione intitolata “Importare solo quello che ti serve con from ... import”Se conosci già le funzioni necessarie, puoi importarle direttamente e omettere il nome del modulo nelle chiamate:
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
Sezione intitolata “from math import *: sconsigliato”Puoi importare tutto con *, ma questa forma è sconsigliata:
from math import * # Importa TUTTO dal modulo math
print(sin(0)) # Funziona, ma...Così non è più chiaro da quale modulo provengano le funzioni. Inoltre, nomi uguali provenienti da moduli diversi possono sovrascriversi.
Rinominare con as
Sezione intitolata “Rinominare con as”Con as puoi assegnare un alias a un modulo o a una funzione, per abbreviare un nome o 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
Sezione intitolata “Creare il tuo modulo”Un modulo è un file .py. Crea, per esempio, 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__"
Sezione intitolata “Il blocco if __name__ == "__main__"”Quando importa un modulo, Python esegue il codice contenuto nel file. Il codice di test potrebbe quindi partire anche durante un’importazione.
Per evitarlo, racchiudi il codice di test in questo blocco:
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)) # Test__name__ == "__main__" è True solo nel file avviato direttamente, non nei moduli importati.
Moduli utili già inclusi in Python
Sezione intitolata “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
Sezione intitolata “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
Sezione intitolata “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