2.18. Usare i moduli

Un modulo è una raccolta di codice Python – funzioni, classi, costanti – impacchettato in modo da poter essere riutilizzato in molti script. Python è dotato di una libreria standard piena di moduli, e il firmware di OpenMV ne aggiunge altri per comunicare con la camera. Per accedere a un modulo si usa import.

2.18.1. import

La forma più diretta importa l’intero modulo con il suo nome:

import math

print(math.sqrt(2))

Output:

1.4142135623730951

Dopo l”import, ogni nome definito da math è raggiungibile come math.<name>. Il nome del modulo deriva dal suo nome di file (senza .py); il prefisso del namespace impedisce che due moduli con la stessa funzione entrino in conflitto.

2.18.2. from … import

Per importare nomi specifici direttamente nell’ambito corrente, usa from:

from math import sqrt, pi

print(sqrt(2), pi)

Output:

1.4142135623730951 3.141592653589793

Non c’è più alcun prefisso di namespace. Questo è comodo per i nomi usati molto spesso, ma un import from che porta molti nomi rende più difficile capire da dove provenga ciascun nome. Un semplice import math è di solito più chiaro negli script più grandi.

La forma con l’asterisco from math import * importa tutto ciò che il modulo esporta. Evitala – inquina il namespace e manda in confusione l’autocompletamento dell’IDE.

2.18.3. Alias con as

I nomi di modulo lunghi possono essere abbreviati con as:

import json as j

j.dumps({"ok": True})

Lo stesso trucco funziona sui singoli nomi importati con from:

from math import sqrt as root

root(9)              # 3.0

Per il codice Python generico, usa un alias solo quando il nome originale è davvero lungo o entra in conflitto con qualcos’altro già presente nell’ambito.

2.18.4. Moduli disponibili

Il riferimento della libreria elenca ogni modulo presente sulla camera – la libreria standard di MicroPython e i moduli specifici di OpenMV che pilotano il sensore di immagine, eseguono la visione artificiale e controllano l’hardware integrato. Tutti usano lo stesso meccanismo di import mostrato sopra.