2.42. Podsumowanie

Przeszedłeś przez te części Pythona, które stale pojawiają się przy pisaniu skryptów dla OpenMV Cam:

  • Podstawy języka – wartości i zmienne, arytmetyka i porównania, ciągi znaków i bajty, cztery podstawowe kolekcje (list, tuple, dict, set), instrukcje warunkowe i pętle, definiowanie funkcji oraz zarządzanie ich argumentami i zasięgiem, definiowanie klas i korzystanie z dziedziczenia, zgłaszanie i obsługa wyjątków. To cegły, z których zbudowany jest każdy inny element Pythona.

  • Elementy strukturalne – dzielenie kodu na moduły i pakiety, importowanie tego, czego potrzebujesz, odczyt i zapis plików za pomocą with, wymiana danych strukturalnych poprzez json oraz pakowanie rekordów binarnych za pomocą struct z kolejnością bajtów i polami liczb całkowitych o stałej szerokości. Pojawiają się one w chwili, gdy skrypt rozrasta się poza pojedynczy plik lub musi komunikować się z czymś na zewnątrz.

  • Części, które zmieniają kształt w ograniczonym środowisku uruchomieniowym – dlaczego liczby zmiennoprzecinkowe w MicroPython są 32-bitowe i jak je niezawodnie porównywać, jak garbage collector przydziela i odzyskuje bloki, dlaczego fragmentacja ma znaczenie na małej stercie oraz jak prealokacja utrzymuje długo działające skrypty w dobrej kondycji. Nawyki z komputerów stacjonarnych potrafią tu wprowadzać w błąd; ten materiał daje właściwy model myślowy dla kodu działającego na urządzeniu.

  • Narzędzia do introspekcji i kodu dynamicznegoid(), hash(), isinstance(), issubclass(), callable(), globals(), locals() do przyglądania się samym wartościom i środowisku; eval() / exec() / compile() dla rzadkich przypadków, gdy generowanie kodu w czasie wykonania jest właściwym rozwiązaniem. Większość skryptów nigdy ich nie dotyka, ale świadomość ich istnienia (i tego, kiedy po nie nie sięgać) jest częścią czytania cudzego kodu w Pythonie.

  • Dopasowywanie wzorców w tekście – moduł re dla ciągów, których postać potrafisz opisać, ale nie wyliczyć. Klasy znaków, kwantyfikatory, grupy przechwytujące, kotwice oraz kompromis między dopasowaniem zachłannym a leniwym, wraz z konkretnymi miejscami, w których podzbiór MicroPython odbiega od CPython. Sięgaj po niego, gdy str.find lub str.split przestają wystarczać.

  • Kontenery wykraczające poza typy wbudowanecollections.namedtuple() dla typowanych rekordów, collections.deque dla ograniczonych buforów cyklicznych i okien przesuwnych, collections.OrderedDict, gdy kolejność wstawiania jest częścią równości, oraz heapq dla pytań typu „co jest najmniejsze” lub „co jest najpilniejsze” zbudowanych na zwykłej liście. Każdy z nich wypełnia lukę pozostawioną przez cztery podstawowe typy kontenerów.

  • Narzędzia codziennego przepływu pracy – składanki (comprehensions) do budowania kolekcji z już istniejących, generatory i protokół iteratora do leniwego przetwarzania danych, dekoratory i menedżery kontekstu do opakowywania typowych wzorców pozyskiwania/zwalniania oraz przed/po, a także nawyki debugowania (czytanie śladów wywołań, repr(), dir(), help(), moduł logging), które zmieniają zepsuty skrypt w działający.

2.42.1. Korzystanie z tego elementarza później

Traktuj ten elementarz jako materiał referencyjny, a nie lekturę do jednorazowego przeczytania. Rozdziały są celowo krótkie; powracanie do nich, aby odświeżyć sobie wiedzę o wycinkach, menedżerach kontekstu czy składankach, jest zamierzonym sposobem korzystania. Dodaj do zakładek sekcję, po którą sięgasz najczęściej.

Jeśli coś w dokumentacji kamery odwoła się później do pojęcia Pythona, którego nie rozpoznajesz – powiedzmy „to zwraca menedżer kontekstu” lub „iteruj po wyniku” – odpowiednia strona elementarza jest miejscem, od którego warto zacząć.

2.42.2. Dokąd dalej

Podstawowa obsługa sprzętu opiera się bezpośrednio na Pythonie, który już znasz. Tam, gdzie elementarz żył w pamięci, obsługa sprzętu żyje w świecie fizycznym – napięcia na pinach, impulsy na przewodach, bajty taktowane przez magistrale do innych układów. Zestaw narzędzi przesuwa się w stronę modułu machine i cienkiej warstwy elektroniki. Wszystko z elementarza przenosi się dalej; nie będziesz na nowo uczyć się def czy with ani tego, czym bytearray różni się od bytes.

Gdy natrafisz na funkcję Pythona, która wyda Ci się nieznana w materiale o sprzęcie, ten elementarz jest miejscem, do którego warto wrócić.