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.