Библиотека питониста | Python, Django, Flask
38.8K subscribers
3.1K photos
88 videos
55 files
4.78K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://t.me/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36

#WXSSA
Download Telegram
📸 inline-snapshot: хватит писать тесты вручную

Если вы хоть раз тратили полдня на то, чтобы вручную переписывать огромные JSON-словари в тестах после мелкого изменения в API — этот инструмент для вас.

Команда Pydantic вовсю использует inline-snapshot, чтобы навсегда забыть о ручном обновлении ассертов.

Вместо того чтобы придумывать «ожидаемый результат», вы просто пишете:

from inline_snapshot import snapshot

def test_api():
data = fetch_data()
assert data == snapshot({}) # Сначала оставляем пустым



Теперь запустите: pytest --inline-snapshot=fix.
Библиотека сама вставит актуальные данные прямо в ваш .py файл! Теперь ваш тест выглядит так:


def test_api():
data = fetch_data()
assert data == snapshot({
"id": 123,
"status": "active",
"name": "Pydantic Fan"
})



😎 Продвинутые хаки для профи

1. Динамические данные (dirty-equals)
Если в ответе есть поля, которые меняются при каждом запуске (ID, таймстампы), используйте dirty-equals. Они идеально работают в связке с инлайн-снимками:


from dirty_equals import IsInt, IsNow

assert user_data == snapshot({
"id": IsInt(), # Снепшот запомнит условие, а не число
"created_at": IsNow(), # Проверит время, близкое к текущему
"status": "active"
})



2. Нормализация данных
Чтобы тесты не падали из-за того, что объект — это не словарь, а инстанс класса, используйте Pydantic для конвертации:


from pydantic import TypeAdapter
_adapter = TypeAdapter(object)

# Конвертируем всё в обычные dict/list перед сравнением
assert _adapter.dump_python(user_model) == snapshot(...)



🔗 Попробовать: https://clc.to/RHb6SA

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
🏗 Что под капотом у Python List

Многие думают, что list — это связный список. На самом деле это динамический массив указателей.

1. Как он хранится в памяти

В структуре PyListObject на языке C список состоит из трех ключевых полей:

ob_item — указатель на массив, где лежат адреса объектов.
ob_size — текущее количество элементов (то, что выдает `len()`).
allocated — сколько ячеек памяти зарезервировано на самом деле.

2. Магия Append и «переезд» памяти

Python не выделяет память под каждый новый элемент. Он делает это «на вырост» (over-allocation). Если вы создаете пустой список и делаете append, Python выделит сразу 4 ячейки. Когда они закончатся — 8, потом 16, 24 и так далее.

Почему append быстрый? В 99% случаев вы просто записываете адрес в уже готовую ячейку ().
Что такое Resize? Когда лимит (`allocated`) исчерпан, Python ищет в памяти новый кусок побольше и копирует туда все указатели. Это , но из-за редких «переездов» амортизированная сложность остается .

3. Почему в списке может лежать «всё что угодно»

Размер самого списка не зависит от того, лежат там строки или другие списки. Массив ob_item хранит только указатели (адреса в памяти), а они всегда фиксированного размера — 8 байт на 64-битной системе.

Благодаря этому Python мгновенно находит любой элемент по индексу. Адрес -го элемента вычисляется по простой формуле:

адрес = начало_массива + i * 8 байт.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍155😁1
This media is not supported in your browser
VIEW IN TELEGRAM
🏎 Pyrefly v0.52.0: проверка типов

Если вы когда-нибудь ждали по несколько секунд, пока Mypy или Pyright соизволят подсветить ошибку после сохранения файла, у меня для вас отличные новости. Вышел Pyrefly v0.52.0, и он чертовски быстрый.

Разработчики вдохновлялись скоростью лыжника на зимней Олимпиаде.

Что изменилось:

➡️ Обновление ошибок в 18 раз быстрее: Благодаря умному стримингу диагностики, ошибки в редакторе обновляются почти мгновенно. То, что раньше занимало секунды в больших проектах, теперь укладывается в 200 мс.

➡️ Холодный старт в 3 раза быстрее: Индексация проекта при открытии IDE теперь пролетает незаметно.

➡️ Экономия памяти на 40-60%: Языковой сервер (LSP) стал гораздо меньше «отъедать» оперативки. На тяжелых репозиториях типа PyTorch это буквально спасение для ноутбуков.

🔗 GitHub: https://clc.to/Qc8KBQ

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🤩1
⚡️ t-строки в Python: юзаем PEP 750, не дожидаясь релиза

Пока все только привыкли (или нет) к f-строкам, в Python 3.14 (который выйдет еще не скоро) готовят революцию — Template Strings (t-строки).

Но зачем ждать?

Пакет tstrings позволяет использовать этот синтаксис на версиях Python < 3.14 уже сейчас.

В отличие от f-строк, которые сразу превращаются в готовую строку, t-строки возвращают объект шаблона. Это позволяет «лениво» обрабатывать данные, защищаться от SQL-инъекций или генерировать HTML без риска XSS.

Как это выглядит сейчас (бэкпорт)

Вместо нативного синтаксиса t"..." мы используем функцию t():

from tstrings import t

name = "World"
tpl = t("Hello, {name}!")

print(tpl.strings) # ("Hello, ", "!") — статические части
print(tpl.interpolations) # (Interpolation(value="World", ...)) — данные



Что умеет tstrings-backport:
— String interpolation: Полная поддержка выражений внутри {}.
— Debug-режим: Старый добрый {var=}, как в f-строках.
— Спецификаторы: Поддержка форматов вроде :.2f и конвертаций !r, !s.
— Многострочность: Можно писать сложные выражения внутри шаблона.

⚠️ Ограничения

Поскольку это бэкпорт, мы не можем добавить новый литерал в синтаксис языка (нельзя написать просто t"..."`). Приходится оборачивать в функцию `t("..."). Также ошибки проверяются в рантайме, а не при компиляции.

🔗 Попробовать: pip install tstrings-backport

Как думаете, вытеснят ли t-строки привычные f-строки в будущем, или это инструмент только для узких задач типа SQL и HTML?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
Собираем фулл-хаус: 3 курса по цене 1

Хватит выбирать между «полезно», «модно» и «для души». Мы запустили механику, которая позволяет собрать кастомный стек навыков без удара по бюджету: покупаете один курс — два других забираете бесплатно.

Даже если вы уже пишете, обновлённый курс по Python поможет систематизировать базу и собрать портфолио. В дополнение — алгоритмы и структуры данных (чтобы проходить собесы в BigTech) и архитектура и шаблоны (чтобы писать поддерживаемый код).

Естественное развитие для питониста — полный набор по AI: от математики и ML-старта до разработки автономных агентов.

Собрать свой пак
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
📱 Свой Android на ESP32: Обзор MicroPythonOS

На FOSDEM 2026 тут показали проект, который заставил меня по-другому взглянуть на разработку под микроконтроллеры.

Ребята выкатили MicroPythonOS.

Теперь на обычном ESP32 можно запустить систему с интерфейсом, который не стыдно показать людям.

Самое дикое — она целиком написана на MicroPython. Внутри стоит «тонкое» ядро для работы с железом, а всё остальное — это просто приложения.

Из интересного:

⏺️ Тачскрин как на смартфоне: Плавные жесты, виджеты и анимации через LVGL. Это реально ощущается как мини-iOS.
⏺️ Свой App Store: Не надо перепрошивать девайс каждый раз. Зашел в стор, скачал «приложение» (например, камеру или плеер), и оно работает.
⏺️ Обновления по воздуху (OTA): Система сама обновляется через Wi-Fi. Больше никаких проводов и мучений с драйверами.
⏺️ Разработка на компе: Можно запустить симулятор на Windows или Linux, отладить интерфейс и только потом закинуть на железку.

Проект идеально бегает на ESP32-S3 (особенно на платах с готовыми LCD-панелями) и на новом Raspberry Pi RP2350.

Можно придумать кучу применений: от крутых DIY-часов и пультов для умного дома до терминалов оплаты или обучающих гаджетов для детей.

🔗 Потыкать исходники: https://clc.to/SODsfQ

Как вам идея? Стали бы использовать Python для «серьезных» интерфейсов на железках, или всё-таки старый добрый C++ и ручные страдания — наше всё?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥5
🐍 Python 3.15.0 alpha 6: что нового в будущем релизе

Опубликована шестая из восьми запланированных альфа-версий Python 3.15.

Главные изменения и фичи (на текущий момент):

⚡️ Новый профайлер (PEP 799): Включает высокочастотный статистический профайлер с низкими накладными расходами и выделенный пакет для профилирования.
⚡️ Распаковка в генераторах (PEP 798): Теперь можно использовать * и ** для распаковки данных прямо внутри comprehensions.
⚡️ UTF-8 по умолчанию (PEP 686): Python официально переходит на UTF-8 как кодировку по умолчанию.
⚡️ Улучшенный JIT-компилятор: Значительный апгрейд производительности — ускорение на 3-4% на x86-64 Linux и на 7-8% на AArch64 macOS по сравнению со стандартным и tail-calling интерпретаторами соответственно.
⚡️ Типизация (PEP 728): Поддержка TypedDict с типизацией дополнительных (extra) элементов.
⚡️ C API (PEP 782): Новый API PyBytesWriter для создания объектов bytes в Python.

График релизов:
— 3.15.0a7: Следующий релиз ожидается уже 10 марта 2026 года.
— Бета-фаза: Начнется 5 мая 2026 года.
— Release Candidate: Запланирован на 28 июля 2026 года.

🔗 Скачать и почитать подробнее: https://clc.to/XhtfQw

Какая из фич кажется вам самой полезной? Лично я жду возможность распаковки в генераторах — код станет ещё лаконичнее.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2
🧩 Python Puzzle: что выведет код

Представьте три файла в одной директории: ✔️ a.py: A = 1; from b import * ✔️ b.py: from a import *; A += 1 ✔️ c.py: from a import A; print(A) Что произойдет при запуске python c.py?
Anonymous Quiz
50%
Ошибка ImportError
29%
Напечатает 1
21%
Напечатает 2
🕵️‍♂️ Разгадка

Правильный ответ — 2. Чтобы понять почему, нужно заглянуть в механизм работы sys.modules и оператора from ... import.

Этот пример наглядно показывает две особенности Python:

1. Импорт незавершенных модулей: Python позволяет импортировать модуль, который находится в процессе загрузки, если он уже попал в sys.modules.

2. Коварство from ... import: Это не просто ссылка, а копирование текущих значений имен. Если вы измените скопированную переменную в другом модуле, оригинал не изменится... пока вы не импортируете его обратно.

Если бы мы использовали строгие импорты имен, которых еще не существует в момент кругового вызова, мы бы получили ImportError. from ... import * в данном случае «спасает» ситуацию, просто копируя то, что уже успело появиться в пространстве имен на момент вызова.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
🐍 Python 3.12 vs 3.13 vs 3.14: Какую версию выбрать

За последние три года Python прошел путь от «косметического ремонта» до фундаментальных изменений в ядре.

🧼 Python 3.12: Релиз 2023

Эта версия не ломала основы, но сделала код чище.

▪️ Новый синтаксис типов (PEP 695): Вместо громоздких TypeVar, теперь можно писать лаконично: class Stack[T]: ....
▪️ F-строки без границ: Теперь внутри f-строк можно использовать любые кавычки, обратные слэши и многострочные выражения.
▪️ Ускорение: Генераторы (comprehensions) стали до 2х раз быстрее благодаря инлайнингу.

🧪 Python 3.13: Релиз 2024

Версия-эксперимент. Главные фичи здесь были спрятаны под флагами.

▪️ Free-threading (No GIL): Появилась первая экспериментальная сборка без глобальной блокировки интерпретатора. Но экосистема (библиотеки вроде NumPy) тогда еще не была готова.
▪️ Новый REPL: Интерактивная консоль получила цвета, многострочное редактирование и нормальную историю.
▪️ Удаление «мертвых батареек»: Из стандартной библиотеки вырезали 20 старых модулей (вроде cgi и `telnetlib`).

🏆 Python 3.14: Релиз 2025

Здесь экспериментальные семена дали плоды.

▪️ T-строки (PEP 750): Революция в безопасности. Они позволяют передавать данные в шаблоны (SQL, HTML) без риска инъекций, так как значения не склеиваются в строку сразу.
▪️ Официальный No GIL: Поддержка многопоточности без GIL стала стабильной. Теперь Python может по-настоящему нагружать все ядра процессора.
▪️ Отложенная оценка аннотаций: Больше не нужно писать from __future__ import annotations. Циклические импорты из-за типов ушли в прошлое.
▪️ Zstandard в stdlib: Быстрое сжатие теперь доступно из коробки.

Что использовать
🔹 Python 3.14 — ваш выбор для новых проектов. Лучшая производительность, современная типизация и безопасные шаблоны.
🔹 Python 3.13 — если вы уже на нем и всё работает. Стабильная, крепкая версия, но смысла переходить на неё с 3.12 сейчас меньше, чем прыгнуть сразу на 3.14.
🔹 Python 3.12 — только если вы привязаны к древним библиотекам, которые еще не обновились. В остальных случаях пора планировать миграцию.

Совет: Если вы обновляетесь с 3.12, прыгайте сразу на 3.14. Вы пропустите «транзитную» 3.13 и сразу получите все бонусы производительности и безопасности.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
11🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Конструктор графических интерфейсов Python с поддержкой Drag-and-Drop

Инструмент для визуального создания графических интерфейсов на Python — без ручной вёрстки кода.


Позволяет перетаскивать элементы (кнопки, поля ввода, таблицы и т.д.) на форму, настраивать их свойства и автоматически генерировать Python-код.

🔗 Ссылка на tool

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍141
⏱️ Справочник по Big-O в Python

Для тех, кто хочет писать не просто работающий, а эффективный код, обновился ультимативный справочник — Python Time & Space Complexity Reference.

Это детальная база данных по сложности операций для версий Python от 3.9 до 3.14.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥61👍1
Пишешь на Python? Пора становиться AI-инженером

Python — родной язык для AI, но одного знания синтаксиса уже мало. Рынок 2026 года требует умения строить отказоустойчивые агентные системы. Мы обновили курс «Разработка AI-агентов», добавив жёсткий инженерный трек.

Твой новый стек:

🔹 LangGraph & Orchestration. Внедряем Human-in-the-loop, time-travel для отладки и сложные графы состояний вместо лапши из if-else.

🔹 Advanced RAG. Промышленные пайплайны на Python: парсинг, эмбеддинги, векторные БД и улучшение поисковых запросов.

🔹 Backend-инжиниринг. Управление токенами, кэширование, роутинг запросов и предотвращение регрессий.

🔹 Production Ready. Модуль по управлению браузером, интеграция с legacy и юридические аспекты (152-ФЗ).

Стартуй сейчас!
Покупаешь курс — сразу получаешь материалы для пре-подготовки.

🎟 Промокод Agent — скидка 10 000 ₽ (до 28 февраля).

👉 Перейти к инжинирингу
👍2🥱1
💡 Библиотека algorithms: реализация классических алгоритмов на Python

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

Автор собрал ключевые алгоритмы и оформил их максимально чисто: с аннотациями типов, подробными docstrings и оценкой сложности прямо в коде.

Примеры того, что есть «под капотом»:

1. Графы и поиск путей:
Реализованы основные алгоритмы: от поиска в ширину (BFS) до алгоритмов Дейкстры и Беллмана-Форда.


from algorithms.graph import dijkstra

graph = {
"s": {"a": 2, "b": 1},
"a": {"c": 8},
"b": {"d": 2},
"c": {"t": 4},
"d": {"c": 11, "t": 5},
"t": {},
}
print(dijkstra(graph, "s", "t")) # (8, ['s', 'b', 'd', 't'])



2. Динамическое программирование:
Например, классическая задача о размене монет или нахождении подпоследовательностей.

3. Структуры данных:
Binary Heap (двоичная куча), Trie (префиксное дерево), BST (бинарное дерево поиска).

Как попробовать:
Устанавливается стандартно через pip:
pip install algorithms

🔗 Github

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61