Salta al contenuto
Note per Studenti Moduli e libreria standard

Moduli e libreria standard

In questa pagina 4

Moduli

Un modulo è un file .py: le funzioni, le classi e le variabili definite al suo livello più esterno diventano suoi attributi. Un pacchetto è una cartella di moduli.

python
import math                 # si usa math.sqrt(2)
import math as m            # alias: m.sqrt(2)
from math import sqrt, pi   # si usa sqrt(2) direttamente
from math import *          # importa tutto: sconsigliato (nomi che si sovrascrivono)

Al primo import il modulo viene eseguito una volta; gli import successivi riusano lo stesso oggetto modulo. Il modulo viene cercato nella cartella dello script, poi nella libreria standard e nei pacchetti installati (sys.path).

Moduli propri

geometria.pypython
PI = 3.141592653589793

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

if __name__ == "__main__":
    # eseguito solo con "python geometria.py", non quando il modulo viene importato
    print(area_cerchio(1))
main.pypython
from geometria import area_cerchio
print(area_cerchio(2))

La variabile __name__ vale "__main__" nel file avviato da riga di comando e il nome del modulo negli altri casi. Il blocco finale serve a mettere nello stesso file funzioni riusabili e codice di prova.

Struttura consigliata di uno script:

python
def main():
    ...

if __name__ == "__main__":
    main()

Libreria standard: i moduli più usati

Modulo Contenuto
math funzioni matematiche, costanti, isclose, gcd
random random(), randint(a, b) (estremi inclusi), choice, shuffle, seed
sys sys.argv (argomenti da riga di comando), sys.exit(), sys.getrecursionlimit()
os, pathlib file e cartelle, percorsi
time time.perf_counter() per misurare tempi (vedi Complessità computazionaleCosto di un algoritmo in funzione della dimensione dell'input; caso peggiore, migliore e medio; notazione O-grande e classi di crescita; come contare i passi di cicli e ricorsioni; costo delle operazioni Python.Complessità computazionale →)
collections deque, Counter, defaultdict (vedi Pila e codaPila (LIFO) e coda (FIFO) come ADT: operazioni e costi; realizzazione in Python con list e collections.deque; realizzazione in C con array e indici, coda circolare; applicazioni (parentesi bilanciate, stack delle chiamate, visite).Pila e coda →, Dizionari e insiemi in PythonADT mappa e insieme; dict con chiavi hashable, accesso, get, iterazione, conteggi e raggruppamenti; set e operazioni insiemistiche; tabelle hash e costo O(1) medio; Counter e defaultdict.Dizionari e insiemi in Python →)
csv lettura/scrittura di file CSV (vedi File di testo in Pythonopen con modalità e codifica, il costrutto with, lettura riga per riga, read e readlines, scrittura con write e print, percorsi relativi, file CSV con il modulo csv.File di testo in Python →)
copy copy.deepcopy (vedi Liste in Pythonlist come sequenza mutabile (array dinamico); indici, slicing e assegnamento a fette; metodi e loro costo; aliasing, copia superficiale e profonda; list comprehension; liste annidate e matrici.Liste in Python →)
unittest test automatici (vedi Debugging e testingTipi di errore, metodo per localizzare un bug, lettura del traceback, stampe di controllo, debugger (VS Code, pdb, gdb), assert e strumenti per la memoria in C; test di unità, casi limite e partizioni, doctest e unittest.Debugging e testing →)
python
import random
random.seed(42)              # risultati riproducibili
dado = random.randint(1, 6)

Pacchetti esterni (non nella libreria standard) si installano con pip install nome.

Errori tipici

  • Chiamare un proprio file come un modulo standard (random.py, math.py): l'import carica il proprio file al posto di quello della libreria.
  • Codice di prova al livello del modulo senza il blocco if __name__ == "__main__": che viene eseguito a ogni import.
  • from modulo import * che sovrascrive nomi già definiti.