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.