Двадцать четвёртый урок курса по Python. Модуль про pandas начинается с вопроса, с которого и должен: стоит ли он того. Отвечает замер, а не вера. Где pandas быстрее в сорок раз, где всего вдвое, где он медленнее обычного цикла, сколько стоит памяти — и правило, когда таблица уже нужна.
Двадцать третий урок курса по Python. Программа, которая работает ночью без вас: аргументы вместо правки кода, журнал с уровнями вместо `print`, замок против двух одновременных запусков и код возврата, который единственный и читает планировщик. Плюс cron, launchd и systemd — строкой каждый.
Двадцать второй урок курса по Python. База считает сама: `GROUP BY` даёт по строке на валюту, `JOIN` подставляет названия из второй таблицы, а месяц — это группа из первых семи символов даты. Плюс подвох: `avg` по пустому ответу возвращает не ноль, а `None`.
Двадцать первый урок курса по Python. База вместо файла: строку добавляют, вчерашние остаются, а повторный запуск дня не плодит дубли. Плюс два измеренных подвоха: склейка значения в запрос вернула всю таблицу вместо одной валюты, а закрытие без `commit` потеряло запись.
Двадцатый урок курса по Python. Три вещи, из которых состоит вежливость к чужому серверу: таймаут — не ждать вечно, повтор с удвоением паузы — не бить лежачего, кеш — не спрашивать дважды. Измерено на своём сервере: четыре чтения, один запрос.
Девятнадцатый урок курса по Python. Тот же ответ Нацбанка, но читает его разборщик: 39 валют, курс по имени тега, а не по кускам строки. Плюс два подвоха: `find` для отсутствующего тега возвращает `None`, а тег с пространством имён по короткому имени не находится вовсе.
Восемнадцатый урок курса по Python. Запрос к Нацбанку: 200, `text/xml`, 11 407 байт — и это `bytes`, а не строка. Плюс разница, из-за которой рушится обработка ошибок: `HTTPError` — сервер ответил «нет», `URLError` — ответа не было вовсе.
Семнадцатый урок курса по Python. Сводка выросла до одного длинного файла, и пора разложить её по именам. `import` выполняет чужой файл целиком, `__name__` отличает модуль от запущенного, а свой `csv.py` рядом с программой молча заменяет стандартный.
Шестнадцатый урок курса по Python. Сто тысяч квадратов списком занимают почти четыре мегабайта, генератором — 376 байт: измерено, вместе со всеми числами. Разница не в том, как считать, а в том, когда появляются значения. Плюс главная ошибка: генератор одноразовый, и второй проход по нему тихо даёт пустоту.
Пятнадцатый урок курса по Python. Из пяти названий в списке разных — четыре: множество съедает повтор молча. Зато три вопроса к двум выгрузкам решаются тремя знаками: `&` — что в обеих, `-` — чего не стало, `|` — всё вместе. Плюс `{}` — это пустой словарь, а не пустое множество.
Четырнадцатый урок курса по Python. Между 15 января и 1 марта — 45 дней, и считает их `timedelta`, а не вы. Плюс два подвоха: `01.02.2026` разбирается двумя форматами без единой ошибки — январём и февралём, — а наивное время нельзя вычесть из осознанного, и Python говорит об этом прямо.