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 poprzezjsonoraz pakowanie rekordów binarnych za pomocąstructz 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 dynamicznego –
id(),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ł
redla 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, gdystr.findlubstr.splitprzestają wystarczać.Kontenery wykraczające poza typy wbudowane –
collections.namedtuple()dla typowanych rekordów,collections.dequedla ograniczonych buforów cyklicznych i okien przesuwnych,collections.OrderedDict, gdy kolejność wstawiania jest częścią równości, orazheapqdla 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ć.