Код легче всего читать сразу после написания. Через месяц — уже нет.
И главный союзник читаемости — whitespace (пробелы и переносы строк).
Плохо:
result = a**2+b**2+c**2
Лучше:
result = a**2 + b**2 + c**2
Слишком много:
result = a ** 2 + b ** 2 + c ** 2
👉 Пробелы должны подчёркивать смысл, а не ломать группы.
Python игнорирует переносы внутри
() [] {} — используйте это.Слишком плотный код:
print("I like", " and ".join(sorted(fruits)), "but only certain pears")
Читаемо:
print(
"I like",
" and ".join(sorted(fruits)),
"but only certain pears",
)
В одну строку:
html_files = [p.name for p in paths if p.suffix == ".html"]
По смысловым блокам:
html_files = [
p.name
for p in paths
if p.suffix == ".html"
]
Тяжело читать:
books = Book.objects.filter(...).select_related(...).order_by("title")
Ясная последовательность:
books = (
Book.objects.filter(author__in=favorite_authors)
.select_related("author", "publisher")
.order_by("title")
)
MONTHS = {
"January": 1,
"February": 2,
"March": 3,
# ...
}
👉 Trailing comma помогает форматтерам и будущим правкам.
Используйте их, чтобы отделять смысл:
def process():
data = load_data()
cleaned = clean(data)
return analyze(cleaned)
Но не переусердствуйте — не каждый перенос улучшает код.
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤4🔥2
Python-разработчик — от 130 000 до 180 000 ₽, удалёнка
Backend-разработчик — от 200 000 до 300 000 ₽, удалёнка
Senior Python developer, удалёнка
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🎅 Секретный Санта для айтишников от Proglib.academy
Весь этот год команда Академии запускала курсы для айтишников. А под Новый год мы запускаем новый курс по ИИ-агентам и ставим под ёлку самый свежий стек 2025 года и обучение проектированию автономных нейросетевых экосистем — от LLM и ReAct-циклов до мультиагентных систем, LangGraph, AutoGen и продакшн-практик.
🎁 Хотим дарить подарки и приглашаем вас поучаствовать в конкурсе:
1️⃣ Упомяните курс Академии у себя в блоге.
2️⃣ Пришлите скрин сюда.
3️⃣ Получите секретный промокод на 10 000 ₽ при оплате любого курса.
Подходит всё — соцсети, блоги, Telegram-каналы от 300 подписчиков и более.
🎄 Акция действует до Нового года.
Win-win, всё как мы любим!
Весь этот год команда Академии запускала курсы для айтишников. А под Новый год мы запускаем новый курс по ИИ-агентам и ставим под ёлку самый свежий стек 2025 года и обучение проектированию автономных нейросетевых экосистем — от LLM и ReAct-циклов до мультиагентных систем, LangGraph, AutoGen и продакшн-практик.
🎁 Хотим дарить подарки и приглашаем вас поучаствовать в конкурсе:
1️⃣ Упомяните курс Академии у себя в блоге.
2️⃣ Пришлите скрин сюда.
3️⃣ Получите секретный промокод на 10 000 ₽ при оплате любого курса.
Подходит всё — соцсети, блоги, Telegram-каналы от 300 подписчиков и более.
🎄 Акция действует до Нового года.
Win-win, всё как мы любим!
❤1
💡 Как сделать сложные regex читаемыми с помощью Pregex
Регулярные выражения вроде:
работают отлично… но читать и поддерживать их — то ещё удовольствие.
Особенно тяжело, если:
🔛 код смотрит не автор,
🔛 в команде есть люди без опыта с regex,
🔛 нужно что-то быстро поправить или расширить.
Pregex решает эту проблему, превращая регулярки в понятный Python-код из описательных блоков.
Установка:
Если регулярно сталкиваетесь с regex в проде — стоит посмотреть.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
Регулярные выражения вроде:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
работают отлично… но читать и поддерживать их — то ещё удовольствие.
Особенно тяжело, если:
Pregex решает эту проблему, превращая регулярки в понятный Python-код из описательных блоков.
Установка:
pip install pregex
Если регулярно сталкиваетесь с regex в проде — стоит посмотреть.
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3❤1🤔1
WANTED: PYTHON-МАСТЕР
Обвиняется в написании идеально чистого кода на
Приметы:
— знает все тонкости
— умеет выстраивать архитектуру веб-приложений или систем обработки данных;
— обладает талантом объяснять сложные вещи доступно;
— хочет стать узнаваемым экспертом в индустрии.
Условия:
— гонорар за участие в проектах Proglib Academy;
— статус лидера мнений в Python-сообществе;
— гибкий формат сотрудничества.
Заполнить анкету
P.S. Видел питониста, чей код безупречен? Сдай его нам.
Обвиняется в написании идеально чистого кода на
Python. Мы ищем того, кто готов перестать просто кодить и начнёт формировать стандарты обучения для большой аудитории.Приметы:
— знает все тонкости
Python (опыт в Go или Java будет преимуществом);— умеет выстраивать архитектуру веб-приложений или систем обработки данных;
— обладает талантом объяснять сложные вещи доступно;
— хочет стать узнаваемым экспертом в индустрии.
Условия:
— гонорар за участие в проектах Proglib Academy;
— статус лидера мнений в Python-сообществе;
— гибкий формат сотрудничества.
Заполнить анкету
P.S. Видел питониста, чей код безупречен? Сдай его нам.
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ psp — быстрый старт Python-проекта
psp (Python Scaffolding Projects) — ультрабыстрый CLI-инструмент для создания структуры Python-проектов.
Написан на Rust, поэтому работает в разы быстрее привычных scaffolding-тулов.
Что умеет:
✅ в 1–100 раз быстрее аналогов
✅ сразу работает с pyproject.toml и Python 3.14
✅ генерирует файлы и структуру проекта
✅ поддержка unittest, pytest, tox и CI
✅ генерирует Dockerfile / Containerfile
✅ инициализация git, .gitignore, GitHub/GitLab
✅ README, LICENSE, CONTRIBUTING и прочая база
Подходит, если хочется быстро и аккуратно начать Python-проект, без ручной возни с шаблонами и конфигами.
🔗 Проект: https://clc.to/ZDiQfA
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
psp (Python Scaffolding Projects) — ультрабыстрый CLI-инструмент для создания структуры Python-проектов.
Написан на Rust, поэтому работает в разы быстрее привычных scaffolding-тулов.
Что умеет:
Подходит, если хочется быстро и аккуратно начать Python-проект, без ручной возни с шаблонами и конфигами.
🔗 Проект: https://clc.to/ZDiQfA
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🤔2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁25👏3❤1
В статье автор шаг за шагом пересобирает упрощённый
@dataclass, показывая ключевые идеи.В отличие от обычных декораторов, он:
— читает метаданные класса
— добавляет методы прямо в этот же класс
— возвращает тот же объект
def dataclass(cls):
# модифицируем cls
return cls
__annotations__Все поля dataclass — это просто type hints:
class User:
name: str
age: int
print(User.__annotations__)
# {'name': str, 'age': int}
Именно этот словарь используется для генерации
__init__, __repr__ и других методов.execОдна из самых неочевидных частей:
dataclass генерирует код как строки и выполняет его через exec.Пример простейшего
__init__, созданного динамически:
def __init__(self, name, age):
self.name = name
self.age = age
Этот код сначала собирается как строка, затем превращается в функцию и добавляется в класс через
setattr.frozen=TrueЧтобы сделать объект неизменяемым:
— переопределяются
__setattr__ и __delattr__— любые попытки изменить поле → ошибка
def __setattr__(self, name, value):
raise Exception("Cannot assign to frozen dataclass")
Но есть нюанс:
__init__ тоже использует __setattr__. Поэтому внутри
__init__ приходится писать так:
object.__setattr__(self, "age", age)
__repr____repr__ строится из self.__dict__:
def __repr__(self):
return f"User(name={self.name!r}, age={self.age!r})"
Флаг
!r гарантирует, что значения форматируются через их __repr__, а не __str__.В итоге кастомный
@dataclass:— читает
__annotations__— через
exec создаёт __init__, __repr__— опционально блокирует изменения (`frozen`)
— не создаёт новых объектов, а модифицирует существующий класс
⚠️ Отдельно отмечается: если нужны валидации типов — лучше смотреть в сторону Pydantic, который использует те же аннотации, но идёт дальше.
📖 Полный разбор — по ссылке.
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4
Python — язык №1 для создания AI-агентов. Освойте передовой стек 🐍
Библиотеки
Программа обучения:
— создание «мозга» агента на базе
— оркестрация агентов в
— применение протокола
— продвинутый
Итогом курса станет дипломный проект — рабочая группа агентов, решающая задачи от техподдержки до рыночной аналитики.
Начать обучение 🎓
Библиотеки
LangChain, CrewAI и AutoGen перевернули представление о разработке. Мы научим вас использовать их на максимум для создания автономных систем.Программа обучения:
— создание «мозга» агента на базе
OpenAI SDK и паттерна ReAct;— оркестрация агентов в
n8n и работа с внешними API;— применение протокола
MCP от Anthropic для связи систем;— продвинутый
RAG: превращаем документы в структурированную базу знаний.Итогом курса станет дипломный проект — рабочая группа агентов, решающая задачи от техподдержки до рыночной аналитики.
Начать обучение 🎓
👍3❤2
📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
🔥7👍3
Python (FastAPI) vs Go: нагрузочный тест и анализ производительности
FastAPI снова сравнили с Go — цифры, графики, честный бенчмарк.
Мало кто знает, но в Python есть switch/case
Подробный гид по
match/case: не только «красивый if», но и мощный инструмент для парсинга структур данных.Как устроено управление памятью в Python и зачем нужны слабые ссылки
Разбор GC, reference counting и
weakref. После прочтения становится чуть понятнее, почему «утечки» бывают даже в языке с автоматическим управлением памятью.5 ключевых изменений в Python 3.14 глазами инженера
Хорошее напоминание, что Python медленно, но методично взрослеет, а не просто добавляет синтаксический сахар.
Классы в Python: от основ ООП до продвинутых концепций
Большой материал для тех, кто вроде бы знает классы, но до сих пор не уверен, когда нужен
__slots__, а когда — композиция вместо наследования. Полезно перечитать.Топ-5 фишек Python, которые вы, скорее всего, упустили
Отличный способ прокачать язык без изучения очередного фреймворка.
📍 Навигация: Вакансии • Задачи • Собесы
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
🧠 Бесконечная память для Python за 3 шага
Когда Python-приложение внезапно упирается в память — обычно всё заканчивается плохо. Но есть способ этого избежать.
Как это работает:
1️⃣ Помечаете нужные классы декоратором @db0.memo — поддерживаются обычные типы, коллекции и ссылки на другие объекты.
2️⃣ Ограничиваете использование RAM через db0.set_cache_size() — лимит применяется ко всем объектам вместе.
3️⃣ Создаёте сколько угодно объектов: когда память заканчивается, они автоматически выгружаются в хранилище (диск, NAS и т.д.).
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
Когда Python-приложение внезапно упирается в память — обычно всё заканчивается плохо. Но есть способ этого избежать.
Как это работает:
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4
Наверняка вы ловили
UnboundLocalError: переменная читалась нормально, ты добавил присваивание ниже в функции — и всё сломалось. Коротко, что происходит на самом деле 👇
Перед запуском функция компилируется. На этом этапе Python решает, какие переменные локальные, а какие глобальные.
Если внутри функции есть
x = ..., то x считается локальной во всей функции, даже выше по коду.X = 10
def f():
print(X) # 💥 UnboundLocalError
X = 5
Python заранее решает:
X — локальная → глобальную он даже не проверяет.*
LOAD_GLOBAL — поиск в глобальном словаре (медленно)*
LOAD_FAST_CHECK — доступ к слоту локальной переменной (очень быстро)Если переменная помечена как локальная, используется
LOAD_FAST_CHECK.Слот пуст →
UnboundLocalError.Почему так сделано:
Если нужна именно глобальная:
def f():
global X
print(X)
X = 5
UnboundLocalError — не баг и не «Python сошёл с ума», а следствие компиляции и оптимизаций.Если ошибка указывает на строку чтения — ищи присваивание ниже в функции.
👉 Подробный разбор с dis и байткодом — по ссылке.
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤6🥱1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁24💯6👏2
В этом году мы делились самыми интересными материалами про Python: от секретов dataclasses и bytecode до эффективного многопоточного Python и лайфхаков с библиотеками PyPi.
📌 В подборке:
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉3❤1
💡 Полезные Python-библиотеки, о которых многие забывают
Мы часто тратим часы на задачи, которые решаются одной библиотечной функцией. PyPi полон таких «скрытых сокровищ», но многие разработчики их игнорируют.
Вот библиотеки, которые реально экономят время:
🔛 Pyperclip – автоматизация буфера обмена. Забудьте о ручном копировании.
🔛 FireDucks – Pandas, но в 3–8 раз быстрее. Просто поменяйте импорт!
🔛 Rich – красивые терминальные таблицы, прогресс-бары, цвета.
🔛 Textual – терминальные интерфейсы, похожие на приложения.
🔛 Glom – безопасная работа с вложенными JSON.
🔛 Box – доступ к словарям через точечную нотацию.
🔛 Typer – создание CLI через type hints (без argparse).
🔛 Pipe – Unix-пайплайны в Python.
🔛 AnyIO – асинхронность без сложностей.
🔛 Zict – умное кеширование (RAM + диск).
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
Мы часто тратим часы на задачи, которые решаются одной библиотечной функцией. PyPi полон таких «скрытых сокровищ», но многие разработчики их игнорируют.
Вот библиотеки, которые реально экономят время:
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4
Если у вас в проекте несколько долгоживущих процессов — веб-сервер, очередь задач, CSS-билдер и т.д. — запускать и следить за ними в разных терминалах становится утомительно.
mprocs решает эту проблему: это лёгкий менеджер процессов для разработчиков:
mprocs.yaml в корне проекта и описываете команды:procs:
django: uv run manage.py runserver
tailwind: npx @tailwindcss/cli -i input.css -o output.css -w
huey: uv run huey_consumer.py my_app.huey -k process -w 4
mprocs — и все процессы стартуют одновременно.Можно интегрировать с just для ещё более удобного управления:
procs:
django: just runserver
tailwind: just watch_css
huey: just queue
📍 Навигация: Вакансии • Задачи • Собесы
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4👏1🤔1
Python — база для AI-агентов. Но знаешь ли ты паттерны?
На курсе «Разработка AI-агентов» мы проходим путь от промпта до мультиагентной экосистемы.
Что в программе:
— создание «мозга» агента на базе
— автоматизация через
— протокол
— продвинутый
🎄 Выныривай из праздников с новым планом на 2026 год. До 12 января действует акция «3 в 1»: курс по ИИ-агентам + 2 курса в подарок.
Записаться на курс
LangChain, CrewAI и AutoGen — это просто инструменты. Чтобы собрать реально работающую автономную систему, нужно понимать логику ReAct и уметь оркестровать агентов.На курсе «Разработка AI-агентов» мы проходим путь от промпта до мультиагентной экосистемы.
Что в программе:
— создание «мозга» агента на базе
OpenAI SDK и LangChain;— автоматизация через
n8n: подключаем агентов к любым внешним API;— протокол
MCP и мультиагентность: учим ботов работать в команде;— продвинутый
RAG: превращаем документы в структурированную базу знаний.🎄 Выныривай из праздников с новым планом на 2026 год. До 12 января действует акция «3 в 1»: курс по ИИ-агентам + 2 курса в подарок.
Записаться на курс
😢2🥱1