Lezioni del modulo (4/4)
import e moduli
Un modulo in Python è semplicemente un file .py. Per usare il codice
di un modulo da un altro file, lo si importa.
Forme di import
# 1) import del modulo intero
import math
math.sqrt(16) # 4.0
math.pi # 3.14159...
# 2) import di nomi specifici
from math import sqrt, pi
sqrt(16) # ora direttamente disponibile
pi
# 3) import con alias
import numpy as np # convenzione idiomatica
from datetime import datetime as dt
# 4) import "star" (sconsigliato)
from math import * # inquina il namespace, evitaDove cerca Python i moduli
Python cerca i moduli in sys.path, che include:
- la directory dello script in esecuzione,
- le directory in
PYTHONPATH, - le librerie installate (
site-packages).
import sys
sys.path # lista di directoryCreare un modulo
Crea mio_modulo.py:
# mio_modulo.py
PI = 3.14159
def area_cerchio(r):
return PI * r * rDa un altro file nella stessa directory:
import mio_modulo
mio_modulo.area_cerchio(5) # 78.53975
from mio_modulo import area_cerchio, PIif __name__ == "__main__":
Quando uno script viene eseguito direttamente, la sua variabile speciale
__name__ vale "__main__". Quando lo stesso file viene importato come
modulo, __name__ vale il nome del modulo.
# strumento.py
def fai_qualcosa():
print("lavoro!")
if __name__ == "__main__":
# eseguito solo se lanci `python strumento.py`
# NON viene eseguito se qualcuno importa questo file
fai_qualcosa()È il pattern standard per file che possono fungere sia da modulo riutilizzabile sia da script eseguibile.
Package: cartelle di moduli
Una directory con un file __init__.py (anche vuoto) diventa un package
importabile:
mio_pkg/
__init__.py
utenti.py
pagamenti.py
from mio_pkg import utenti
from mio_pkg.utenti import crea_utenteNamespace dei moduli e importazioni
Quando importi un modulo come import math, crei un namespace isolato. Questo evita conflitti di nomi. Se scrivi from math import sqrt, porti la funzione direttamente nel namespace globale corrente: da quel momento puoi chiamare sqrt() invece di math.sqrt(). Attenzione a non sovrascrivere funzioni built-in del linguaggio!
Prova tu
Importa la funzione `sqrt` dal modulo `math` (con `from math import sqrt`), poi calcola la radice di 144 e assegnala a `r`. Valuta `r`.
Mostra suggerimento
from math import sqrt
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Importa il modulo `random` con alias `rnd` (`import random as rnd`), poi imposta il seed a 42 con rnd.seed(42), e valuta rnd.randint(1, 100).
Mostra suggerimento
import random as rnd
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Importa le funzioni `sin` e `cos` direttamente dal modulo `math` usando `from ... import ...`. Calcola la somma di `sin(0)` e `cos(0)`, salvala in `trig_sum` e valutala.
Mostra suggerimento
sin(0) fa 0.0, cos(0) fa 1.0. La somma fa 1.0. Usa from math import sin, cos.
Soluzione disponibile dopo 3 tentativi