2.42. Sammanfattning

Du har gått igenom de delar av Python som ständigt dyker upp när man skriver skript för OpenMV Cam:

  • Språkets grunder – värden och variabler, aritmetik och jämförelse, strängar och bytes, de fyra centrala samlingstyperna (list, tuple, dict, set), villkor och loopar, att definiera funktioner och hantera deras argument och scope, att definiera klasser och använda arv, att ge upphov till och hantera undantag. Det här är byggstenarna som varje annan del av Python är uppbyggd av.

  • De strukturella delarna – att dela upp kod över moduler och paket, att importera det du behöver, att läsa och skriva filer med with, att utbyta strukturerad data via json och att packa binära poster via struct med endianness och heltalsfält med fast bredd. De dyker upp i samma stund som ett skript växer förbi en enda fil eller behöver kommunicera med något utanför sig självt.

  • De delar som ändrar form i en begränsad körmiljö – varför MicroPython-flyttal är 32-bitars och hur man jämför dem på ett tillförlitligt sätt, hur skräpsamlaren delar ut och återvinner block, varför fragmentering spelar roll i en liten heap och hur förallokering håller långkörande skript välartade. Vanor från skrivbordet kan ibland leda fel här; det här materialet ger dig rätt mental modell för kod som lever på enheten.

  • Verktygen för introspektion och dynamisk kodid(), hash(), isinstance(), issubclass(), callable(), globals(), locals() för att titta värden och miljön; eval() / exec() / compile() för de sällsynta fall där det rätta svaret är att producera kod vid körningstid. De flesta skript rör aldrig dessa, men att veta att de finns (och när man inte ska ta till dem) är en del av att läsa andras Python.

  • Mönstermatchning på text – modulen re för strängar vars form du kan beskriva men inte räkna upp. Teckenklasser, kvantifierare, fångande grupper, ankare och avvägningen mellan girig och lat, tillsammans med de specifika ställen där MicroPythons delmängd inte når hela vägen till CPython. Ta till den när str.find eller str.split inte räcker längre.

  • Behållare utöver de inbyggdacollections.namedtuple() för typade poster, collections.deque för begränsade ringbuffertar och rullande fönster, collections.OrderedDict när insättningsordningen är en del av likhet, och heapq för frågor om ”vad är minst” eller ”vad är mest brådskande” byggda på en vanlig lista. Var och en fyller en lucka som de fyra centrala behållartyperna lämnar efter sig.

  • De vardagliga arbetsflödesverktygen – comprehensions för att bygga samlingar från befintliga, generatorer och iteratorprotokollet för att bearbeta data lat, dekoratorer och kontexthanterare för att kapsla in vanliga mönster för förvärva/frigör och före/efter, samt felsökningsvanorna (att läsa tracebacks, repr(), dir(), help(), modulen logging) som förvandlar ett trasigt skript till ett fungerande.

2.42.1. Att använda denna introduktion senare

Behandla introduktionen som referensmaterial, inte en genomläsning i ett svep. Kapitlen är medvetet korta; att komma tillbaka för att fräscha upp minnet om slicing eller kontexthanterare eller comprehensions är den avsedda användningen. Bokmärk det avsnitt du tar till oftast.

Om något i kamerans dokumentation senare hänvisar till ett Python-koncept du inte känner igen – säg, ”detta returnerar en kontexthanterare” eller ”iterera resultatet” – är motsvarande introduktionssida platsen att börja på.

2.42.2. Vart man går härifrån

Grundläggande hårdvarustyrning bygger direkt på den Python du nu kan. Där introduktionen levde i minnet lever hårdvarustyrning i den fysiska världen – spänningar på stift, pulser på ledningar, bytes klockade över bussar till andra chip. Verktygslådan skiftar till modulen machine och ett tunt lager elektronik. Allt från introduktionen bärs vidare; du kommer inte att behöva lära om def eller with eller hur bytearray skiljer sig från bytes.

När du stöter på en Python-funktion som känns obekant i hårdvarumaterialet är denna introduktion platsen att komma tillbaka till.