2.42. Подведение итогов

Вы прошли по тем частям Python, которые постоянно встречаются при написании скриптов для OpenMV Cam:

  • Основы языка – значения и переменные, арифметика и сравнение, строки и байты, четыре основных коллекции (list, tuple, dict, set), условия и циклы, определение функций и управление их аргументами и областью видимости, определение классов и использование наследования, возбуждение и обработка исключений. Это кирпичики, из которых строится всё остальное в Python.

  • Структурные элементы – разделение кода на модули и пакеты, импорт того, что вам нужно, чтение и запись файлов с помощью with, обмен структурированными данными через json и упаковка двоичных записей через struct с порядком байтов и целочисленными полями фиксированной ширины. Они появляются в тот момент, когда скрипт вырастает за пределы одного файла или ему нужно общаться с чем-то внешним.

  • Части, которые меняют форму на ограниченной среде выполнения – почему числа с плавающей точкой в MicroPython 32-битные и как их надёжно сравнивать, как сборщик мусора выдаёт и освобождает блоки, почему фрагментация важна на небольшой куче и как предварительное выделение памяти сохраняет хорошее поведение долго работающих скриптов. Привычки с настольных систем здесь иногда вводят в заблуждение; этот материал даёт вам правильную ментальную модель для кода, который живёт на устройстве.

  • Инструменты интроспекции и динамического кодаid(), hash(), isinstance(), issubclass(), callable(), globals(), locals() для рассмотрения значений и окружения; eval() / exec() / compile() для редких случаев, когда генерация кода во время выполнения – правильный ответ. Большинство скриптов никогда их не используют, но знание об их существовании (и о том, когда к ним не стоит прибегать) – часть умения читать чужой код на Python.

  • Сопоставление с образцом для текста – модуль re для строк, форму которых вы можете описать, но не можете перечислить. Классы символов, квантификаторы, захватывающие группы, якоря и компромисс между жадным и ленивым сопоставлением, а также конкретные места, где подмножество MicroPython не дотягивает до CPython. Обращайтесь к нему, когда возможностей str.find или str.split уже не хватает.

  • Контейнеры за пределами встроенныхcollections.namedtuple() для типизированных записей, collections.deque для ограниченных кольцевых буферов и скользящих окон, collections.OrderedDict, когда порядок вставки является частью равенства, и heapq для вопросов «что наименьшее» или «что самое срочное», построенных на обычном списке. Каждый из них заполняет пробел, который оставляют четыре основных типа контейнеров.

  • Инструменты повседневной работы – генераторы коллекций (comprehensions) для построения коллекций из существующих, генераторы и протокол итераторов для ленивой обработки данных, декораторы и менеджеры контекста для оборачивания распространённых паттернов захвата/освобождения и до/после, а также навыки отладки (чтение трассировок, repr(), dir(), help(), модуль logging), которые превращают сломанный скрипт в исправленный.

2.42.1. Использование этого учебника в дальнейшем

Относитесь к учебнику как к справочному материалу, а не как к чтению за один проход. Главы намеренно короткие; возвращаться, чтобы освежить знания о срезах, менеджерах контекста или генераторах коллекций – это и есть задуманное использование. Добавьте в закладки раздел, к которому обращаетесь чаще всего.

Если что-то в документации камеры позже ссылается на концепцию Python, которую вы не узнаёте – скажем, «это возвращает менеджер контекста» или «проитерируйте результат» – соответствующая страница учебника – это место, с которого стоит начать.

2.42.2. Куда двигаться дальше

Базовое управление оборудованием строится непосредственно на том Python, который вы теперь знаете. Если учебник жил в памяти, то управление оборудованием живёт в физическом мире – напряжения на выводах, импульсы на проводах, байты, передаваемые по шинам на другие микросхемы. Инструментарий смещается к модулю machine и тонкому слою электроники. Всё из учебника переносится дальше; вам не придётся заново учить def или with или то, чем bytearray отличается от bytes.

Когда вы столкнётесь с возможностью Python, которая покажется незнакомой в материале по оборудованию, этот учебник – то место, куда стоит вернуться.