2.18. Korzystanie z modułów

Moduł to zbiór kodu Pythona – funkcji, klas, stałych – spakowany tak, aby można go było ponownie wykorzystywać w wielu skryptach. Python jest dostarczany z biblioteką standardową pełną takich modułów, a oprogramowanie układowe OpenMV dodaje kolejne do komunikacji z kamerą. Do modułu sięga się za pomocą import.

2.18.1. import

Najbardziej bezpośrednia forma wciąga cały moduł pod jego własną nazwą:

import math

print(math.sqrt(2))

Wyjście:

1.4142135623730951

Po wykonaniu import każda nazwa zdefiniowana przez math jest dostępna jako math.<name>. Nazwa modułu pochodzi od jego nazwy pliku (bez .py); przedrostek przestrzeni nazw zapobiega kolizjom dwóch modułów mających funkcję o tej samej nazwie.

2.18.2. from … import

Aby wciągnąć konkretne nazwy bezpośrednio do bieżącego zakresu, użyj from:

from math import sqrt, pi

print(sqrt(2), pi)

Wyjście:

1.4142135623730951 3.141592653589793

Nie ma już przedrostka przestrzeni nazw. Jest to wygodne dla często używanych nazw, ale import from wprowadzający wiele nazw utrudnia rozpoznanie, skąd pochodzi każda z nich. Zwykłe import math jest zazwyczaj czytelniejsze w większych skryptach.

Forma z gwiazdką from math import * wciąga wszystko, co moduł eksportuje. Pomiń ją – zanieczyszcza przestrzeń nazw i myli autouzupełnianie w IDE.

2.18.3. Tworzenie aliasów za pomocą as

Długie nazwy modułów można skrócić za pomocą as:

import json as j

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

Ta sama sztuczka działa na pojedynczych nazwach importowanych za pomocą from:

from math import sqrt as root

root(9)              # 3.0

W ogólnym kodzie Pythona stosuj alias tylko wtedy, gdy oryginalna nazwa jest naprawdę długa lub koliduje z czymś już istniejącym w zakresie.

2.18.4. Dostępne moduły

Dokumentacja biblioteki wymienia każdy moduł dostarczany na kamerze – bibliotekę standardową MicroPythona oraz moduły specyficzne dla OpenMV, które obsługują sensor obrazu, uruchamiają wizję maszynową i sterują sprzętem wbudowanym. Wszystkie one używają tego samego mechanizmu import pokazanego powyżej.