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.