Передать накопленные байты и опустошить буфер Парсер накапливает данные в изменяемом bytearray, а наружу должен отдать неизменяемый bytes. В Python 3.15 у буфера появился метод take_bytes: он извлекает первые n байтов, а без размера забирает всё содержимое и оставляет буфер пустым. Согласно документации, в CPython извлечение всех байтов выполняется без копирования. Если взять только префикс и сохранить остаток в bytearray, копирование потребуется. Если остаток вам не нужен, документация предлагает сначала обрезать буфер, затем забрать его целиком. При последовательном разборе сообщений, где хвост ещё понадобится, извлечь префикс без копирования не получится.
Открыть в Telegram
Zen of Python
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
Подписчики, 30 дней
1 нояб. – 3 нояб.−15 (−0,1%)
Показать таблицей
| Дата | Подписчики |
|---|---|
| 1 нояб. 2026 г. | 18 705 |
| 2 нояб. 2026 г. | 18 695 |
| 3 нояб. 2026 г. | 18 690 |
Средние просмотры поста по дням
По дню публикации
Показать таблицей
| Дата | Просмотров на пост |
|---|---|
| 23 окт. 2026 г. | 1 404 |
| 24 окт. 2026 г. | 1 351 |
| 25 окт. 2026 г. | 1 373 |
| 26 окт. 2026 г. | 1 303 |
| 27 окт. 2026 г. | 1 104 |
| 28 окт. 2026 г. | 1 052 |
| 29 окт. 2026 г. | 1 037 |
| 30 окт. 2026 г. | 1 046 |
| 31 окт. 2026 г. | 1 015 |
| 1 нояб. 2026 г. | 979 |
| 2 нояб. 2026 г. | 892 |
| 3 нояб. 2026 г. | 761 |
| 4 нояб. 2026 г. | 349 |
Самые просматриваемые за месяц
- 01Просмотры1,42 тыс.Пересылки2Реакции2Комментарии0
- 02Просмотры1,39 тыс.Пересылки3Реакции—Комментарии0
- 03Просмотры1,39 тыс.Пересылки3Реакции—Комментарии0
- 04Просмотры1,36 тыс.Пересылки3Реакции—Комментарии0
- 05Просмотры1,35 тыс.Пересылки2Реакции3Комментарии0
Новые посты
Куда пропало условие Windows в pylock.toml Зависимость нужна только в Windows и только группе разработки. В pylock.toml это можно записать одним маркером с обоими условиями. Если при чтении потерять весь маркер, пакет начнёт устанавливаться и на других платформах. Именно такую ошибку исправили в Pipenv 2026.10.1. Она затрагивала маркеры, которые вместе с ограничением платформы или версии Python содержали dependency_groups. В журнале приведён пример файла, экспортированного через PDM. При обработке группы Pipenv терял и оставшуюся часть условия. Если вы экспортируете зависимости в pylock.toml, а затем устанавливаете их через Pipenv, проверьте комбинированные маркеры на разных целевых окружениях.
Открыть в TelegramОбрезать строку и не оторвать ударение Одна видимая буква может состоять из нескольких кодовых точек. При сокращении подписи в интерфейсе срез по произвольному индексу может отделить комбинируемый знак от буквы. В Python 3.15 появился итератор графемных кластеров unicodedata.iter_graphemes. Он использует расширенные правила сегментации Unicode UAX #29. У каждого элемента есть границы start и end, а преобразование в строку возвращает сам кластер. Можно выбрать целые кластеры и по их границам сформировать сокращённую подпись. При этом число графем не определяет ширину текста: для выравнивания колонок терминала или расчёта пикселей всё ещё нужен отдельный способ измерения.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 3 ч | 442 |
| 15 ч | 823 |
| 27 ч | 898 |
- Через 24 часа898
- Всего сейчас898
Путь к ресурсу пакета может быть временным Ресурс установленного пакета не обязательно лежит обычным файлом рядом с модулем. Пакет может читаться из zip-архива, а importlib.resources.files() возвращает объект Traversable, без гарантии, что ресурс лежит на диске. Для чтения текста часто достаточно read_text(). Если стороннему API нужен настоящий pathlib.Path, используйте as_file(resource) как контекстный менеджер. При необходимости он извлечёт ресурс во временный файл и удалит его при выходе из with. Поэтому передавайте путь потребителю внутри блока, пока ресурс нужен. Не сохраняйте его для отложенного чтения после выхода. Очистка касается созданного временного файла: если ресурс уже лежал на диске, исходный файл пакета при закрытии контекста не удаляется.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 9 ч | 599 |
| 33 ч | 932 |
- Всего сейчас932
Где Hypothesis хранит найденные сбои Hypothesis нашёл неудачный вход, а следующий запуск будет уже на новой машине. Будет ли пример проверен снова? Это зависит в том числе от базы примеров: она сохраняет провалившиеся случаи, а фаза reuse загружает их в следующих запусках. В обычной конфигурации используется .hypothesis/examples. Если каталог недоступен для чтения или записи, библиотека предупреждает и переходит к базе в памяти. При database=None хранения нет вообще. В текущем встроенном профиле ci задано именно это значение, так что постоянный кеш в CI нельзя считать включённым автоматически. Проверьте активный профиль и срок жизни хранилища CI-раннера. База ускоряет повтор известных сбоев, но не заменяет регрессионный тест. Важный вход закрепите через @example или отдельный тест, а не оставляйте только в каталоге кеша.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 3 ч | 450 |
| 15 ч | 764 |
| 27 ч | 851 |
- Через 24 часа851
- Всего сейчас851
fileno может отправить маленький файл на диск Даже если в SpooledTemporaryFile(max_size=1_000_000) записана всего сотня байт, запрос файлового дескриптора перенесёт содержимое из памяти в дисковый файл. У этого временного файла несколько причин перехода к дисковому файлу. При положительном лимите это превышение max_size. Вызов fileno() делает то же самое независимо от размера, а rollover() явно запускает этот переход. Поэтому библиотека, которой передали file-like объект, может изменить способ хранения одним запросом дескриптора. Лимит здесь полезен для буферизации, но условие «размер меньше порога» не доказывает отсутствия файлового I/O. При этом слово «диск» описывает файловое поведение API и не указывает на конкретный физический носитель или задержку операционной системы.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 8 ч | 538 |
| 33 ч | 871 |
| 69 ч | 985 |
- Всего сейчас985
asdict копирует глубже, чем кажется Вызов asdict(obj) не ограничивается созданием словаря полей dataclass. Функция рекурсивно обходит вложенные dataclass, словари, списки и кортежи, а прочие объекты копирует через copy.deepcopy. Если поле содержит большой список, рассчитывать на сохранение ссылки на него нельзя. Для поверхностного представления документация предлагает собрать словарь через fields() и getattr(). На карточке видно различие: у такой сборки вложенный список остаётся общим с исходным объектом. Для чтения полей без копирования вложенных объектов подходит поверхностный словарь. Если нужно менять вложенный список независимо от dataclass, он не подойдёт: вложенные данные остаются общими. Ни один из этих способов сам по себе не превращает произвольное содержимое полей в готовый JSON.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 14 ч | 679 |
| 27 ч | 802 |
| 75 ч | 972 |
- Через 24 часа802
- Всего сейчас972
Исправление Ruff может сменить исключение Замена list(values)[0] на next(iter(values)) позволяет получить первый элемент без построения всего списка. Но на пустом входе меняется тип исключения. Первое выражение поднимет IndexError, второе StopIteration. Обработчик except IndexError больше не сработает. Именно поэтому исправление правила RUF015 в документации Ruff относится к unsafe, хотя на непустом входе оно решает ту же задачу. По умолчанию Ruff применяет safe fixes. Флаг ruff check --fix --unsafe-fixes разрешает и изменения, способные повлиять на поведение или удалить комментарии. Перед таким запуском стоит проверить пустые входы и обработчики ошибок. Ускорение из примера в документации нельзя переносить на любой код.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 33 ч | 844 |
| 69 ч | 996 |
- Всего сейчас996
После commit атрибут может потребовать SQL В асинхронном коде обычное чтение ORM-атрибута не должно неожиданно ходить в базу. Но после commit() SQLAlchemy по умолчанию помечает состояние объектов как устаревшее. Следующее обращение к полю может попытаться загрузить его заново, уже вне явного await. В руководстве SQLAlchemy 2.0 для AsyncSession используют expire_on_commit=False. Уже загруженные значения остаются доступны после commit. Нужное поле или связь можно обновить явно через await session.refresh(obj, ["field"]). Это не предзагрузка всех связей и не гарантия свежести после чужой транзакции. Ленивую связь по-прежнему надо загрузить явным способом. Для параллельных задач всё равно нужны отдельные AsyncSession.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 39 ч | 903 |
| 75 ч | 1 034 |
- Всего сейчас1 034
Пять секунд HTTPX не равны дедлайну запроса Сервер может долго отдавать ответ маленькими порциями, а HTTPX не прервёт чтение по истечении пяти секунд с начала запроса. Тайм-аут чтения ограничивает ожидание очередного фрагмента данных. Если фрагменты приходят вовремя, суммарное чтение может длиться дольше. У HTTPX четыре отдельных ограничения: connect, read, write и pool. Последнее относится к ожиданию свободного соединения в пуле. Поэтому PoolTimeout не исправляется одним увеличением времени подключения к серверу. По умолчанию библиотека ограничивает сетевую неактивность пятью секундами. Настройки тайм-аутов позволяют задать эти ограничения отдельно. Если нужно ограничить общую длительность операции, задайте отдельный общий дедлайн с корректной отменой и освобождением ресурсов.
Открыть в TelegramДинамика просмотровСкрыть динамику
Рост просмотров
Часов после публикации
Показать таблицей
| Часов после публикации | Просмотры |
|---|---|
| 0 ч | 0 |
| 57 ч | 1 016 |
| 69 ч | 1 048 |
- Всего сейчас1 048
Связи
Похожие каналы
ZALA@zalaaeroТехнологии18,7 тыс.
Юра, прости@prostinasТехнологии18,5 тыс.
AI for Devs@ai_for_devsТехнологии18,5 тыс.
Кот на связи.@kotsvzstТехнологии19,1 тыс.
Kali Novskaya@rybolos_channelТехнологии19,1 тыс.
СофтТех@it2b_channelТехнологии18,2 тыс.
Техасский Вестник@starbasepostТехнологии19,2 тыс.
SpaceX | Starship News@starshipnewsliveТехнологии18,1 тыс.