Библиотека питониста | 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
⚙️ CPython Internals: как всё устроено на самом деле

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

CPython Internals — это подробнейший гид по исходному коду Python. Автор буквально препарирует C-код интерпретатора и объясняет, как абстрактные конструкции превращаются в реальные байты.

🔗 Репозиторий здесь: https://clc.to/DO4Ldw

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

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

#буст

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

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥21
🧐 Функция или класс: почему в Python это часто одно и то же

Вы когда-нибудь задумывались, чем на самом деле являются привычные нам print, str или enumerate? Мы привыкли называть их «функциями», потому что мы их вызываем через круглые скобки.

Но в Python всё немного интереснее.

Попробуйте угадать, что из этого функция, а что — класс:
1. print()
2. str()
3. list()
4. sum()

Проверяем:
1. print — (Функция)
2. str —  (Класс!)
3. list —  (Тоже класс)
4. sum —  (Функция)

В Python и функции, и классы являются callable (вызываемыми) объектами.

Когда мы вызываем функцию, мы запускаем её код, чтобы она что-то сделала или вернула результат.

Когда мы вызываем класс, мы создаем его новый экземпляр (instance).

Например, вызывая str(4), мы технически создаем новый объект класса str. Но в повседневной речи мы почти всегда говорим «функция str». И это абсолютно нормально!

🦆 Утиная типизация в деле

То, что мы называем классы функциями — это классический пример duck typing:
«Если это выглядит как утка и крякает как утка, то это утка».


Для нас как для разработчиков часто неважно, как реализован инструмент «под капотом». Если мы можем его вызвать через (), значит для нас это функция.

Даже сама функция type() — это на самом деле класс!


>>> type
<class 'type'>



Но согласитесь, фраза «я вызвал класс type, чтобы узнать тип объекта» звучит максимально странно.

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

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍108
Шпаргалка_BigO.jpeg
305.2 KB
🔥Компактная шпаргалка по Big-O нотации

Незаменимый инструмент для оценки эффективности алгоритмов

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

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
🛡️ Django (Anti)patterns: как не выстрелить себе в ногу

Руководство Django Antipatterns — это концентрат опыта сообщества о том, как писать чистый и производительный код, избегая типичных ловушек.

В гайде также разобраны ключевые отличия, на которых часто валятся новички: ForeignKey vs OneToOneField и reverse vs redirect.

🔗 Весь список паттернов с примерами: https://clc.to/Fg21Tg

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

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🤩1
📸 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
👍145😁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
👍41
🐍 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
👍3