Все самое полезное для питониста в одном канале. Список наших каналов: https://t.me/proglibrary/9197 Учиться у нас: https://proglib.io/w/d7f1e6ed Обратная связь: @proglibrary_feedback_bot По рекламе: @proglib_adv Прайс: @proglib_advertising
➕ От многомерности к сути: чему нас учит PCA
На собеседовании важно уметь выделить главное — свои сильные стороны, мышление и ценности. Это помогает справляться со стрессом, неожиданными вопросами и субъективной оценкой.
⏩ В машинном обучении есть похожий подход — PCA (метод главных компонент). Он сокращает размерность данных, устраняя шум и второстепенные детали, и помогает сфокусироваться на самом важном.
✅ В новой статье мы разберём:
• Как работает PCA
• Зачем он нужен
• Как применять его на практике — например, для анализа доходностей акций S&P 500
🐸 Подробнее: https://proglib.io/sh/uXsDlt75MY
Библиотека питониста
👩💻 Docker - лучший обучающий канал по Devops.
С помощью картинок и коротких видео даже новички начнут применять продвинутые инструменты разработки и использовать Docker.
Стоит подписаться: t.me/DevopsDocker
Реклама. ИП Хоруженко Егор Сергеевич, ИПП 550149218060. Erid 2VtzqufQb3P
🚩 Шпаргалка: методы словаря в Python
Подготовили для вас краткую, но ёмкую шпаргалку по основным методам работы со словарями. Систематизировано и понятно.
Библиотека питониста #буст
🙂 Раскрываем секрет собственных векторов: математическое оружие на собеседовании
Что объединяет успешный собес и продвинутый анализ данных? Оба требуют способности выделять главное из информационного шума!
В мире данных этот суперскилл называется методом главных компонент (PCA) — это как рентген для ваших данных, который мгновенно показывает всю суть, отбрасывая неважные детали.
Например, мы проанализировали 453 акции компаний из списка S&P 500 и выяснили, что всего одна главная компонента объясняет 38% всей динамики рынка. Как такое возможно?
😘 Расскажем на воркшопе «Математика машинного обучения на практике» 21 апреля!
Вы будете работать с реальными данными, научитесь выявлять скрытые закономерности и применять эти инсайты в своих проектах.
Стоимость: 3990 ₽
Не беспокойтесь, если теоретическая база пока хромает — вы можете заранее посмотреть запись нашего вебинара по основам по ссылке ниже.
➡️ Забронировать место на воркшопе: https://proglib.io/w/6f0e5775
🔖 Это база: секрет Python, который ускорит ваш код в миллионы раз
✅ lru_cache
— декоратор для кеширования результатов функций. Повторные вызовы с теми же аргументами не вычисляются заново — это ускоряет код в разы.
Пример:
from functools import lru_cache
@lru_cache(maxsize=128)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(30)) # Выводит: 832040
print(fibonacci.cache_info()) # Статистика кеша
lru_cache
результаты сохраняются в кеше и повторно используются, что ускоряет выполнение.import requests
from functools import lru_cache
@lru_cache(maxsize=32)
def get_weather(city):
response = requests.get(f"https://api.weather.com/data?city={city}")
return response.json()
print(get_weather("New York")) # Первый вызов
print(get_weather("New York")) # Кешированный ответ
lru_cache
lru_cache
хранит результаты в словаре и отслеживает порядок использования через двусвязный список. Когда кеш переполнен, удаляется наименее недавно использованный элемент.maxsize
позволяет регулировать размер кеша:@lru_cache(maxsize=256)
def expensive_computation(x, y):
return x * x + y * y
@lru_cache(maxsize=32)
def process_data(data_tuple):
return sum(data_tuple)
data = [1, 2, 3, 4]
print(process_data(tuple(data))) # Преобразуем список в кортеж
cache_clear()
.expensive_computation.cache_clear()
@lru_cache
👋 Всем привет!
Мы ищем участников для интервью на тему «Обучение навыкам в IT»!
✔️ Кто нам нужен?
— Вы разработчик или дата сайентист, прокачивающий свои навыки. Или хотите войти в IT.
✔️ Что нужно сделать?
— Заполните гуглоформу по теме (займет не более 10 минут).
— Если нас заинтересует ваш опыт, мы пригласим поучаствовать в небольшом интервью по Zoom (не больше 45 минут).
— Вознаграждение: 1500 рублей на карту за участие + уникальный шанс пообщаться с нашим CEO!
🧑💻 Откликнуться.
👏 Набор настоящего питониста
Монитор, книга, ноутбук и Python. Потому что на ноутбуке можно писать код, на мониторе — лучше увидеть, как он ломается, а книга — чтобы узнать, почему.
Впрочем, в наборе питониста всегда есть место для обновлений Python.
💭 Какое обновление Python сильнее всего повлияло на ваш стиль кода?
❤️ f-строки — читаемо и быстро
👍 @property — красиво и по-взрослому
🔥 Переключение зависимостей — как глоток свежего воздуха
😁 Shared vs independent списки — багов наловил, но стал умнее
🤔 Свой вариант — пишите в комментариях
Библиотека питониста #развлекалово
🖼 ТОП-5 структур данных для обработки изображений
Хотите разобраться, как обрабатывать изображения в компьютерном зрении или графике?
Всё начинается с правильных структур данных. Они помогают хранить и анализировать пиксели, их связи и расположение.
👉 В этой статье — подборка топ решений и советы, как их использовать.
Библиотека питониста
✍️ Вопросы подписчиков: какие Python-проекты ценятся, если ML не интересует?
Привет, питонисты и разработчики! Один из наших подписчиков готовится к первой стажировке и поделился своим вопросом — возможно, он близок и вам:
«Хочу создать проект, чтобы продемонстрировать навыки Python, но не через Machine Learning. Проходил курс Andrew Ng по ML — полезно, но не зацепило, не моё. Может, вернусь к ML позже, но сейчас хочется делать что-то увлекательное и практичное.
Ищу идеи для проекта, который можно добавить в резюме и обсудить на собеседовании. Но почти все советы в сети — про ML и нейросети.
Какие Python-проекты ценят работодатели, если Data Science и ML — не мой путь? Как выделиться, не погружаясь в deep learning?»
🤨 ТОП-7 стран для айтишников в 2025 году
Как найти страну, где работа в IT приносит не только достойный доход, но и удовольствие от жизни? В этой статье Ксения Кравченко собрала семь лучших направлений для релокации айтишников в 2025 году — от стабильных хабов до быстрорастущих техноцентров.
Что в статье:
➡️ Средняя зарплата IT-специалистов в каждой стране
➡️ Уровень налогов и наличие льгот для техсектора
➡️ Иммиграционные программы и условия въезда
➡️ Развитость IT-экосистемы и перспективы в индустрии
➡️ Плюсы и минусы жизни в каждом регионе
Если вы задумываетесь о переезде или просто хотите знать, где IT-навыки особенно ценны — самое время заглянуть в подборку 🔗
📢 Какой рабочий сетап круче?
💻 Выбирайте свой вариант и делитесь в комментариях, как организовали свой рабочий уголок.
А то, может, там уже три монитора, как у хакера из фильмов, или ноутбук на коленках, как у студента перед дедлайном?
❤️ — 1
👍 — 2
⚡️ — 3
👏 — 4
🔥 — 5
🎉 — 6
😁 — 7
😍 — 8
🤩 — 9
Библиотека питониста #развлекалово
😺🐙🧼 Сам себе GitHub: как работать с чистым Git-репозиторием
Git — мощная система контроля версий, которую обычно используют через платформы вроде GitHub и GitLab. Однако Git сам по себе не требует веб-интерфейсов и облачных сервисов. Многие разработчики предпочитают работать с чистым Git-репозиторием, размещенным на собственном сервере.
➡️ В этой статье мы рассмотрим, почему это удобно, и как эффективно отправлять патчи в проекты, использующие этот подход.
🐸 Библиотека программиста
🧱⛏️ Чекни свой крафт: 8 признаков, что разработчик слишком залип в Minecraft
Думаешь, что твоя продуктивность падает из-за багов в коде? А может, все дело в том, что ты мысленно фармишь крипперов, пока твой PM объясняет задачу?
😎 Пройди наш тест и узнай, насколько глубоко ты провалился в пиксельную кроличью нору!
👉 Пройти тест
Библиотека питониста
⚡️ Режим агента в VS Code — теперь для всех
Режим агента (Agent mode) официально открыт для всех пользователей Visual Studio Code!
Это как напарник-программист, который сам решает задачи: копается в коде, правит файлы, запускает команды и чинит ошибки, пока всё не заработает.
⭐ Что он может:
➡️ Понимает многошаговые задачи: редактирует код, следит за ошибками компиляции/линтинга и сам их исправляет
➡️ Сам определяет, какие файлы нужно изменить — вы просто ставите задачу
➡️ Интегрируется с внешними сервисами и инструментами через MCP и расширения
⭐ Как включить:
Включить режим агента можно в Chat View, выбрав Agent
в настройках chat.mode
и активировав chat.agent.enabled
. Если параметр не отображается — обновите VS Code до последней версии и перезапустите.
🔗 Детали обновления: https://clc.to/1lqy9g
Библиотека питониста #свежак
✍🏻 Что такое wheel и eggs в Python? Какая между ними разница?
✍🏻 Python wheel — это стандартный формат установки дистрибутивов Python, который содержит все файлы и метаданные, необходимые для установки. Файл WHL также содержит информацию о версиях и платформах Python, поддерживаемых этим файлом. Расширение файла wheel — .whl
✍🏻 Python egg — это сжатый архив ZIP, содержащий исходные файлы приложения Python вместе с метаинформацией о дистрибутиве. Расширение файла egg — .egg
Основная разница заключается в том, что wheel предоставляет более простой и надежный способ установки пакетов. В отличие от eggs, он не требует установки дополнительных зависимостей и обеспечивает более быстрое время установки. Кроме того, wheel поддерживает все платформы, на которых может работать Python.
Библиотека собеса по Python
👩💻 Docker - лучший обучающий канал по Devops.
С помощью картинок и коротких видео даже новички начнут применять продвинутые инструменты разработки и использовать Docker.
Стоит подписаться: t.me/DevopsDocker
💪 TARIFF — величайший Python-пакет, который делает импорты «великими» снова
TARIFF — это шуточный репозиторий в духе политической сатиры, который позволяет вводить пошлины на Python-библиотеки. Несмотря на ироничную подачу, проект набирает популярность в Python-сообществе.
Установка:
pip install tariff
import tariff
# Устанавливаем пошлины (название_пакета: процент)
tariff.set({
"numpy": 50, # 50% пошлина на numpy
"pandas": 200, # 200% на pandas
"requests": 150 # 150% на requests
})
# Теперь при импорте эти пакеты будут замедлены!
import numpy # +50% к времени импорта
import pandas # +200%
⌨️ Топ-вакансий для питонистов за неделю
Senior Python-разработчик — от 250 000 до 300 000 ₽, гибрид (Москва)
Python разработчик (Middle+/Senior) — от 3000 до 4000 $, удалённо (Бали)
Tech lead Python developer — от 400 000 до 600 000 ₽, удалённо (Бали)
Python разработчик Middle/Senior — от 200 000 до 300 000 ₽, удалённо
Python-разработчик (Junior/Middle) — от 1 500 до 3 100 $, удалённо
➡️ Еще больше топовых вакансий — в нашем канале Python jobs
Библиотека питониста
📱 Шесть релизов Python за один день: вот это весна 2025-го
Во вторник, 8 апреля 2025 года, Python-команда выдала настоящий релизный фейерверк — сразу шесть новых версий Python. Это, без сомнений, один из самых насыщенных дней в истории языка.
⚡ Python 3.14.0a7 — финальный альфа-релиз
— Дата релиза: 8 апреля 2025
— Следующий шаг: 3.14.0 beta1 (6 мая 2025)
— Статус: последний альфа-релиз — до фич-фриза осталось меньше месяца
✅ Ключевые изменения в 3.14:
— PEP 649: отложенная (lazy) обработка аннотаций
— PEP 741: новый C API для конфигурации интерпретатора
— PEP 758: поддержка except
и except*
без скобок
— PEP 761: вместо PGP теперь используется Sigstore для верификации релизов
— PEP 765: запрет return/break/continue
при выходе из finally
— PEP 768: безопасный интерфейс для внешних дебаггеров CPython
— Новый тип интерпретатора с улучшенной производительностью (опционально)
— Поддержка UUID версий 6–8 + ускоренная генерация 3–5 и 8 (до 40% быстрее)
— Улучшенные сообщения об ошибках
— Удаления и депрекейты в C API и Python-коде
⚡ Python 3.13.3
— 320 исправлений, улучшений сборки и документации
— Актуальная стабильная ветка с новыми возможностями и оптимизациями
⚡ Python 3.12.10 — последний багфикс-релиз
— Более 230 исправлений и улучшений
— С этого момента — только security-патчи
🪅 Обновления безопасности для:
✅ Python 3.11.12
— Deadlock fix
— Обновления expat
, уязвимость imaplib
, urlparse
, и др.
✅ Python 3.10.17
— Обновления libexpat
, CVE-2025-0938, imaplib
OOM
✅ Python 3.9.22
— Последние security-фиксы для старой, но ещё поддерживаемой ветки
💡 Призыв к разработчикам:
— Обновите свои проекты, если вы на 3.9–3.13
— Протестируйте Python 3.14 на совместимость
— До фич-фриза осталось < 4 недель — добавляйте свои предложения
Библиотека питониста #свежак
🐍 Python новости
🚀 Релизы и инструменты:
— PEP 750 принят — шаблонные строки в Python
— Python 3.14 и грядущие изменения — фичи альфы и планы до фризов
— httpdbg— удобная отладка HTTP-запросов в Python
— runvenv — shebang + venv: запускаем Python-скрипты из нужного venv
— NVIDIA добавила нативную поддержку Python в CUDA
🧪 Глубже в Python:
— uv + PEP 723 — простой деплой Python-скриптов
— Tail-calling: новый интерпретатор CPython — что меняется под капотом
— Контроль времени в тестах— freeze, mock, Clock
— Гайд по overload — пишем один код для разных бэкендов
— Тонкости логгирования в Python — кратко и по делу
— Создаем ретро-оконный менеджер на Python — стиль Windows 3.x
💭 Истории, подходы, мышление:
— Как я стал core-разработчиком Python в 19 лет
— Путь воина: Python + Go через Цеттелькастен — кому подходит
— Антипаттерны: ломкие функции в Python — как не писать хрупкий и нестабильный код
🌐 Django и веб:
— Django 5.2: что нового — поддержка PEP 649, улучшения ORM и не только
— User onboarding в Django — как улучшить первый опыт пользователя
— Отслеживание изменений моделей с django-pghistory — как логировать историю данных
💻 Экосистема:
— Режим агента в VS Code — теперь для всех
🎮 Fun/DIY:
— 3D-игра на Python своими руками — от идеи до рабочего примера
Библиотека питониста #свежак
😈 PEP’ы, которые бесят (или радуют) питонистов
Каждый раз, когда появляется новый PEP, в воздухе пахнет жареными клавишами.
Поговорим о классике — тех, что навсегда в сердцах (или в чёрном списке):
1⃣ PEP 8 — стиль, который «все соблюдают, но не до конца»
— Отступы, длина строк, имена переменных...
— Каждый линтер и IDE пытается напомнить: «Вы не следуете PEP8!»
— Но разве 81 символ в длину — это преступление?
➡️ Главный источник пассивной агрессии в код-ревью.
2⃣ PEP 484 — Типизация, которая «не настоящая, но работает»
— Hello, type hints...
— Python стал делать вид, что он статически типизирован.
— А mypy
стал делать вид, что всё это имеет смысл.
➡️ Кто-то говорит «будущее», кто-то — «шум и пыль».
3⃣ PEP 572 — Моржик `:=`, который разделил сообщество
Пример:
while (line := file.readline()):
print(line)
pyproject.toml
»🆕 PEP 750 принят: шаблонные строки в Python
Этот PEP вводит в Python шаблонные строки (template strings) для гибкой работы со строками.
🟠Шаблонные строки — это обобщение f-строк: вместо префикса f
используется префикс t
.
🟠 В отличие от f-строк, которые сразу превращаются в обычную строку (str
), t-строки возвращают объект нового типа — Template
:
template: Template = t"Hello {name}"
template = t"Привет, {username}!"
print(template.fields) # ['username']
print(template.source) # 'Привет, {username}!'
result = template.render(username="Алиса")
👀 Что посмотреть: Python 3.14 и грядущие изменения
На днях вышел релиз alpha 7, а после следующего релиза (beta 1) новых фич уже не добавят. Самое время изучить, что нового принесёт Python 3.14 — и в формате видео это ещё удобнее
Темы видео:
🔎 График выхода и ключевые даты
🔎 PEP 765, PEP 648, PEP 758 — что они изменят
🔎 Улучшения производительности: JIT, NOGIL и хвостовая оптимизация
🔎 Практичные новшества и мелкие обновления
🔗 Смотреть видео: https://clc.to/7Z5daA
Библиотека питониста #буст
🙈 Что скрывает дисперсия: разгадка секрета точных ML-моделей
Представьте, что вы строите модель, которая прекрасно работает на тренировочных данных, но стоит подать ей новые примеры... и всё рушится. Знакомо? За этим почти всегда скрывается неправильное обращение с дисперсией.
🧐 Но что, если есть простая формула, способная:
• Мгновенно определить, насколько «разбросаны» ваши данные
• Значительно улучшить точность ваших ML-моделей
• Помочь обнаружить аномалии, которые вы раньше не замечали
В нашем вебинаре мы раскрываем все секреты дисперсии — без сложных терминов и занудных объяснений. Вы узнаете, почему дисперсия — как соль: без нее все пресно, а с переизбытком — несъедобно.
Хотите узнать, как находить идеальный баланс в своих моделях, причем тут Random Forest и много другого о Data Science?
➡️Тогда смотрите бесплатный вебинар от Proglib: 🙈 Что скрывает дисперсия: разгадка секрета точных ML-моделей
Представьте, что вы строите модель, которая прекрасно работает на тренировочных данных, но стоит подать ей новые примеры... и всё рушится. Знакомо? За этим почти всегда скрывается неправильное обращение с дисперсией.
🧐 Но что, если есть простая формула, способная:
• Мгновенно определить, насколько «разбросаны» ваши данные
• Значительно улучшить точность ваших ML-моделей
• Помочь обнаружить аномалии, которые вы раньше не замечали
В нашем вебинаре мы раскрываем все секреты дисперсии — без сложных терминов и занудных объяснений. Вы узнаете, почему дисперсия — как соль: без нее все пресно, а с переизбытком — несъедобно.
Хотите узнать, как находить идеальный баланс в своих моделях, причем тут Random Forest и много другого о Data Science?
➡️Тогда смотрите бесплатный вебинар от Proglib: https://proglib.io/w/b7899b1d
✔️ Чек-лист: как исправить SyntaxError в Python
1⃣ Проверяем базовый синтаксис
🟢 Убедитесь, что после if
, for
, while
, def
, class
есть двоеточие :
if x > 0: вместо if x > 0
()
, []
, {}
print("Hi" → print("Hi")
'text'
или "text"
, а не text
class
, return
, import
) как имена переменныхclass = 5 → ошибка, используйте class_name
==
для сравнения, =
для присваиванияif x = 5 → if x == 5
:
и =
в словарях: {"key": "value"}
, а не {"key" = "value"}
if
, def
) одинаковы (4 пробела или табуляция)def func():
print("Ok") # Не смешивайте пробелы и табы
def my_func()
, а не def my _func()
>>>
и ...
. >>> print("Hi") → print("Hi")
def greet():
print("Hi")
greet() # Нужен перенос строки перед вызовом
— Python 3.9: SyntaxError: invalid syntax
— Python 3.10: SyntaxError: '(' was never closed
SyntaxError: invalid syntax
, начните с проверки скобок, двоеточий и отступов — это решает 80% случаев.😇 Ошибка дня: UnboundLocalError
Сегодня разбираем одну из тех ошибок в Python, которая выглядит загадочно, но легко объяснима, если знать одну тонкость.
💥 Что произошло
1️⃣ Вы определили функцию-декоратор, всё работает:
def trigger(*fns):
def decorator(fn):
fn._next = fns
def _wrapper():
fn()
for f in fn._next:
f()
return _wrapper
return decorator
def step_2():
print("step 2")
def step_3():
print("step 3")
@trigger(step_2, step_3)
def step_1():
print("step 1")
step_1()
Вывод:
step 1
step 2
step 3
fn
снаружи:def _wrapper():
fn()
for fn in fn._next: # ❗️ shadowing
fn()
UnboundLocalError: cannot access local variable 'fn' where it is not associated with a value
fn
переопределяется в цикле, а значит, Python считает, что она локальная для всей _wrapper()
. Поэтому вызов fn()
выше в коде — обращение к переменной, которой ещё нет, отсюда и UnboundLocalError
.fn
повторно. Назовите её f
, next_fn
, step
, callback
— что угодно:for step in fn._next:
step()
Питонисты!
Проголосуйте за наш канал, и в сторис мы опубликуем топ материалов, которые должен прочитать каждый питонист.
➡️Поддержать канал: /channel/boost/pyproglib
📌 How to: заменить break в Python-циклах на элегантные альтернативы
В Python break
в циклах for
прерывает итерацию, но часто есть более читаемые и лаконичные способы. Разберём типичные случаи и их альтернативы.
1️⃣ Проверка наличия элемента
Классика с break
:
color_options = ["blue", "green", "purple"]
is_purple_an_option = False
for color in color_options:
if color == "purple":
is_purple_an_option = True
break
in
:is_purple_an_option = "purple" in color_options
in
работает со всеми итерируемыми объектами, а для set
и dict
ещё и быстрее, чем цикл.break
:points_per_user = [3, 12, 28, 105]
anyone_has_100 = False
for points in points_per_user:
if points > 100:
anyone_has_100 = True
break
any
:anyone_has_100 = any(points > 100 for points in points_per_user)
any
(или all
для "все элементы") делает код выразительнее.break
:words = ["Look", "at", "these", "excellent", "words"]
first_long_word = None
for word in words:
if len(word) > 4:
first_long_word = word
break
next
с генератором:long_words = (word for word in words if len(word) > 4)
first_long_word = next(long_words, None)
next
берёт первый элемент из генератора, а None
— значение по умолчанию, если ничего не найдено.break
:items = ["chair", "desk", "", "lamp"]
before_blank = []
for item in items:
if not item:
break
before_blank.append(item)
itertools.takewhile
:from itertools import takewhile
before_blank = list(takewhile(bool, items))
takewhile
собирает элементы, пока условие истинно, и возвращает итератор.break
полезен, но часто его можно заменить:in
— для проверки наличияany/all
— для условийnext
— для поиска первого значенияtakewhile
— для сбора до условияbreak
?Что выведет код сверху?
👾 — 24
👍 — 1
🥰 — 0
⚡️ — 120
Библиотека задач по Python
🐍 Python новости
🚀 Релизы и инструменты:
— PEP 751 принят — стандартный lockfile для менеджеров пакетов
— Django 5.2 — улучшения ORM, админки и поддержка PEP 649
— Dockerpyze — сборка Docker-образов из проектов на Poetry/uv
— Cirron — утилита для анализа производительности Python- и Ruby-кода
🔬 Глубже в Python:
— PyTorch + No-GIL Python — многопоточный инференс без GIL
— Flask: тестирование API-приложений — гайд по юнит- и интеграционным тестам
— slots в Python — экономим память
— Sys._getframe: глубокая отладка — отладка через call stack
— Настройка Copilot-контекста — как улучшить автодополнение в VS Code
📚 Обучение и лучшие практики:
— ОOП в Python — подборка лучших ресурсов
— Гайд по отказоустойчивым системам — принципы надёжной архитектуры
— Параллелизм и асинхронность в Python — обзор ключевых концепций
— CI/CD + Allure — автотесты и отчёты на пайплайне
— Автоматизация пентеста — практическое руководство
📢 Cобытия:
— Утечка исходников Gemini — слили часть кода от Google
Библиотека питониста #свежак