2.18. Modules gebruiken#
Een module is een verzameling Python-code – functies, klassen, constanten – verpakt zodat hij over veel scripts hergebruikt kan worden. Python wordt geleverd met een standaardbibliotheek vol modules, en de OpenMV-firmware voegt er meer aan toe om met de camera te communiceren. Een module aanspreken doe je met import.
2.18.1. import#
De meest directe vorm haalt de hele module binnen onder zijn eigen naam:
import math
print(math.sqrt(2))
Uitvoer:
1.4142135623730951
Na de import is elke naam die door math gedefinieerd is bereikbaar als math.<name>. De modulenaam komt van zijn bestandsnaam (zonder .py); de namespace-prefix voorkomt dat twee modules met dezelfde functienaam botsen.
2.18.2. from … import#
Om specifieke namen rechtstreeks in de huidige scope te halen, gebruik je from:
from math import sqrt, pi
print(sqrt(2), pi)
Uitvoer:
1.4142135623730951 3.141592653589793
Er is geen namespace-prefix meer. Dit is handig voor namen die veel gebruikt worden, maar een from-import die veel namen binnenhaalt, maakt het moeilijker te zien waar elke naam vandaan kwam. Een gewone import math is in grotere scripts meestal duidelijker.
De ster-vorm from math import * haalt alles binnen wat de module exporteert. Sla die over – hij vervuilt de namespace en brengt de autocomplete van de IDE in de war.
2.18.3. Aliassen met as#
Lange modulenamen kunnen ingekort worden met as:
import json as j
j.dumps({"ok": True})
Dezelfde truc werkt op afzonderlijke namen die met from geïmporteerd zijn:
from math import sqrt as root
root(9) # 3.0
Voor algemene Python-code geef je alleen een alias wanneer de oorspronkelijke naam echt lang is of botst met iets anders dat al in scope is.
2.18.4. Beschikbare modules#
De bibliotheekreferentie somt elke module op die op de camera meegeleverd wordt – de MicroPython-standaardbibliotheek en de OpenMV-specifieke modules die de beeldsensor aansturen, machine vision uitvoeren en de hardware aan boord besturen. Ze gebruiken allemaal hetzelfde import-mechanisme dat hierboven getoond is.