2.42. Riepilogo#

Hai esaminato le parti di Python che ricorrono costantemente quando si scrivono script per la OpenMV Cam:

  • I fondamenti del linguaggio – valori e variabili, aritmetica e confronto, stringhe e byte, le quattro collezioni principali (list, tuple, dict, set), condizionali e cicli, la definizione di funzioni e la gestione dei loro argomenti e del loro scope, la definizione di classi e l’uso dell’ereditarietà, il sollevamento e la gestione delle eccezioni. Questi sono i mattoni da cui è costruito ogni altro pezzo di Python.

  • Gli elementi strutturali – suddividere il codice tra moduli e package, importare ciò di cui hai bisogno, leggere e scrivere file con with, scambiare dati strutturati tramite json e impacchettare record binari tramite struct con l’endianness e campi interi a larghezza fissa. Questi compaiono nel momento in cui uno script supera il singolo file o ha bisogno di comunicare con qualcosa al di fuori di sé.

  • Le parti che cambiano forma su un runtime vincolato – perché i float di MicroPython sono a 32 bit e come confrontarli in modo affidabile, come il garbage collector distribuisce e recupera i blocchi, perché la frammentazione conta su un heap piccolo, e come la pre-allocazione mantiene ben comportati gli script di lunga durata. Le abitudini da desktop a volte traggono in inganno qui; questo materiale ti fornisce il modello mentale corretto per il codice che vive sul dispositivo.

  • Gli strumenti di introspezione e di codice dinamicoid(), hash(), isinstance(), issubclass(), callable(), globals(), locals() per osservare i valori e l’ambiente; eval() / exec() / compile() per i rari casi in cui produrre codice in fase di esecuzione è la risposta giusta. La maggior parte degli script non li usa mai, ma sapere che esistono (e quando non ricorrervi) fa parte del saper leggere il Python scritto da altri.

  • Il pattern matching sul testo – il modulo re per le stringhe la cui forma puoi descrivere ma non enumerare. Classi di caratteri, quantificatori, gruppi di cattura, ancore e il compromesso tra greedy e lazy, insieme ai punti specifici in cui il sottoinsieme di MicroPython si ferma prima di CPython. Ricorri ad esso quando str.find o str.split arrivano al capolinea.

  • Contenitori oltre i built-incollections.namedtuple() per i record tipizzati, collections.deque per i ring buffer limitati e le finestre scorrevoli, collections.OrderedDict quando l’ordine di inserimento fa parte dell’uguaglianza, e heapq per le domande del tipo «qual è il più piccolo» o «qual è il più urgente» costruite su una semplice lista. Ciascuno colma una lacuna lasciata dai quattro tipi di contenitore principali.

  • Gli strumenti del flusso di lavoro quotidiano – le comprehension per costruire collezioni a partire da quelle esistenti, i generatori e il protocollo dell’iteratore per elaborare i dati in modo lazy, i decoratori e i context manager per incapsulare i comuni pattern di acquisizione/rilascio e prima/dopo, e le abitudini di debugging (leggere i traceback, repr(), dir(), help(), il modulo logging) che trasformano uno script rotto in uno funzionante.

2.42.1. Usare questo manuale in seguito#

Considera il manuale come materiale di riferimento, non una lettura unica. I capitoli sono volutamente brevi; tornarci per rinfrescare la memoria sullo slicing, sui context manager o sulle comprehension è l’uso previsto. Aggiungi ai segnalibri la sezione che consulti più spesso.

Se qualcosa nella documentazione della camera fa in seguito riferimento a un concetto Python che non riconosci – ad esempio, «questo restituisce un context manager» o «itera il risultato» – la pagina corrispondente del manuale è il punto da cui iniziare.

2.42.2. Dove andare da qui#

Il controllo base dell’hardware si basa direttamente sul Python che ora conosci. Mentre il manuale viveva nella memoria, il controllo dell’hardware vive nel mondo fisico – tensioni sui pin, impulsi sui fili, byte trasmessi tramite bus ad altri chip. Il set di strumenti si sposta sul modulo machine e su un sottile strato di elettronica. Tutto ciò che hai imparato dal manuale ti sarà utile; non dovrai reimparare def o with né in cosa bytearray differisce da bytes.

Quando incontri una funzionalità di Python che ti sembra poco familiare nel materiale sull’hardware, questo manuale è il punto a cui tornare.