2.18. Modulok használata

Egy modul Python-kód gyűjteménye – függvényeké, osztályoké, konstansoké –, úgy csomagolva, hogy sok szkripten keresztül újra felhasználható legyen. A Python egy egész standard könyvtárral szállít belőlük, az OpenMV firmware pedig továbbiakat ad hozzá a kamerával való kommunikációhoz. Egy modulhoz az import segítségével nyúlhatunk.

2.18.1. import

A legközvetlenebb alak az egész modult a saját neve alatt húzza be:

import math

print(math.sqrt(2))

Kimenet:

1.4142135623730951

Az import után a math által definiált minden név elérhető math.<name> formában. A modul neve a fájlnevéből származik (a .py nélkül); a névtér-előtag megakadályozza, hogy két azonos függvénynevű modul ütközzön.

2.18.2. from … import

Ha konkrét neveket szeretnél közvetlenül a jelenlegi hatókörbe húzni, használd a from kulcsszót:

from math import sqrt, pi

print(sqrt(2), pi)

Kimenet:

1.4142135623730951 3.141592653589793

Itt már nincs névtér-előtag. Ez kényelmes a gyakran használt nevekhez, de egy sok nevet behozó from import megnehezíti annak felismerését, hogy melyik név honnan jött. Az egyszerű import math általában áttekinthetőbb a nagyobb szkriptekben.

A csillagos alak, a from math import *, mindent behoz, amit a modul exportál. Hagyd ki – beszennyezi a névteret, és összezavarja az IDE automatikus kiegészítését.

2.18.3. Álnevezés az as segítségével

A hosszú modulnevek lerövidíthetők az as segítségével:

import json as j

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

Ugyanez a trükk működik a from segítségével importált egyedi neveken is:

from math import sqrt as root

root(9)              # 3.0

Általános Python-kódban csak akkor alkalmazz álnevet, ha az eredeti név valóban hosszú, vagy ütközik valami mással, ami már a hatókörben van.

2.18.4. Elérhető modulok

A könyvtár-hivatkozás felsorolja a kamerán szállított minden modult – a MicroPython standard könyvtárát és az OpenMV-specifikus modulokat, amelyek a képérzékelőt vezérlik, gépi látást futtatnak és a fedélzeti hardvert irányítják. Mindegyik ugyanazt a fentebb bemutatott import mechanizmust használja.