Vai al contenuto
eLearner.app
Modulo 7 · Lezione 4 di 428/36 nel corso~10 min
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

Python
# 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, evita

Dove cerca Python i moduli

Python cerca i moduli in sys.path, che include:

  1. la directory dello script in esecuzione,
  2. le directory in PYTHONPATH,
  3. le librerie installate (site-packages).
Python
import sys
sys.path     # lista di directory

Creare un modulo

Crea mio_modulo.py:

Python
# mio_modulo.py
PI = 3.14159

def area_cerchio(r):
    return PI * r * r

Da un altro file nella stessa directory:

Python
import mio_modulo
mio_modulo.area_cerchio(5)   # 78.53975

from mio_modulo import area_cerchio, PI

if __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.

Python
# 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:

Code
mio_pkg/
    __init__.py
    utenti.py
    pagamenti.py
Python
from mio_pkg import utenti
from mio_pkg.utenti import crea_utente

Namespace 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

Esercizio#python.m7.l4.e1
Tentativi: 0Caricamento…

Importa la funzione `sqrt` dal modulo `math` (con `from math import sqrt`), poi calcola la radice di 144 e assegnala a `r`. Valuta `r`.

Caricamento editor…
Mostra suggerimento

from math import sqrt

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#python.m7.l4.e2
Tentativi: 0Caricamento…

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).

Caricamento editor…
Mostra suggerimento

import random as rnd

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#python.m7.l4.e3
Tentativi: 0Caricamento…

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.

Caricamento editor…
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