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.