Самые догадливые, пишите ответ в комментах 👇
Небольшая подсказка — это термин относится к Python.
Прячем ответы под спойлер, чтобы не спалить остальным.
Библиотека питониста #междусобойчик
Небольшая подсказка — это термин относится к Python.
Прячем ответы под спойлер, чтобы не спалить остальным.
Библиотека питониста #междусобойчик
📚Напоминаем про наш полный курс «Самоучитель по 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
🚀 Релизы и инструменты:
— Шесть релизов Python за один день — весна 2025-го врывается с размахом
— TARIFF — «величайший» Python-пакет
🧠 Профессия и карьера:
— Python остаётся топ-навыком для AI-вакансий — по данным AI Index 2025
🧪 Разработка и производительность:
— Примитивный компилятор на Python — учебный проект с нуля
— CPU-кеш и Python — может ли кеширование ускорить ваш код
🌐 Django и веб:
— F(), Func() и никаких циклов — как Django пишет SQL под капотом
— Django Simple Deploy + DevOps — обсуждаем в подкасте
— Go vs Python для веб-скрейпинга — сравнение инструментов
🎥 Видео:
— Data Engineering + AI/LLMs — видео-урок по загрузке данных
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Завтра запускаем ML-ракету: последние места на борту
Уже завтра, 21 апреля, состоится наш воркшоп «Математика машинного обучения на практике», где теория ML превращается в практические навыки.
Что вас ждет:
📍 Работа с реальными данными — табличные датасеты и изображения
📍 Снижение размерности через PCA — научитесь отделять важное от второстепенного
📍 Обучение моделей — Random Forest и градиентный бустинг в действии
📍 Разбор метрик и гиперпараметров — как настроить модель на максимальную эффективность
📍 Написание кода на Python — прямо как реальных проектах
📍 Персональный code review от эксперта — бесценный фидбек для вашего роста
📍 Доступ в закрытый чат участников — нетворкинг и обмен опытом
Кто проводит воркшоп:
Мария Горденко — инженер-программист, старший преподаватель НИУ ВШЭ и Proglib Academy, руководитель магистратуры от ГК Самолет и Альфа-Банка.
Стоимость участия: 3990₽
Когда: завтра, 21 апреля
👉 Забронировать место на воркшопе: https://proglib.io/w/6f0e5775
Уже завтра, 21 апреля, состоится наш воркшоп «Математика машинного обучения на практике», где теория ML превращается в практические навыки.
Что вас ждет:
Кто проводит воркшоп:
Мария Горденко — инженер-программист, старший преподаватель НИУ ВШЭ и Proglib Academy, руководитель магистратуры от ГК Самолет и Альфа-Банка.
Стоимость участия: 3990₽
Когда: завтра, 21 апреля
👉 Забронировать место на воркшопе: https://proglib.io/w/6f0e5775
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Python | тесты, код, задания
🎉 T-строки официально в Python 3.14
В конце 2025 года нас ждёт мощное пополнение — в Python появятся template strings (t-strings). Это новая форма строк, которая решает старые проблемы f-строк и открывает дверь к более безопасной и гибкой работе с текстом.
🎌 Что такое t-строки
С f-строками (f"...") мы живём с 2016 года — они удобные, но иногда… опасные. Например:
🔎 Такой код легко подставляет вредоносный ввод — и привет, SQL-инъекция или XSS.
Теперь появляется альтернатива: t-строки. Они выглядят похоже:
🔎 Но — они не превращаются сразу в строку, а становятся объектом
🎌 Безопасный HTML
Пример: экранирование HTML-ввода
🔎 Больше никакой грязи в шаблоне. А ещё
🎌 Как работать с t-strings
Шаблон предоставляет доступ к строкам и значениям до их объединения. Свойства
Всегда будет на одну строку больше, чем значений. Например:
Можно просто пройтись по шаблону в цикле:
Для продвинутой обработки можно получить данные о каждой интерполяции:
Можно создать шаблон напрямую:
T-строки — это:
✔️ Безопасность для HTML, SQL и Markdown
✔️ Возможность сложной обработки шаблонов
✔️ Гибкость: можно возвращать любой тип, а не только строку
🔎 Очень хочется, чтобы форматтеры типа black и ruff поддержали t-строки, а VS Code начал подсвечивать их содержимое. Потому что t-strings — это не просто новая игрушка, а основа для более безопасного Python-кода.
Библиотека питониста #свежак
В конце 2025 года нас ждёт мощное пополнение — в Python появятся template strings (t-strings). Это новая форма строк, которая решает старые проблемы f-строк и открывает дверь к более безопасной и гибкой работе с текстом.
С f-строками (f"...") мы живём с 2016 года — они удобные, но иногда… опасные. Например:
f"SELECT * FROM users WHERE name = '{user_name}'"
Теперь появляется альтернатива: t-строки. Они выглядят похоже:
from string.templatelib import Template
template = t"Hello {name}!"
Template
. Их нужно явно обработать, и это даёт пространство для экранирования, валидации и любых безопасных преобразований.Пример: экранирование HTML-ввода
evil = "<script>alert('bad')</script>"
template = t"<p>{evil}</p>"
safe = html(template)
assert safe == "<p><script>alert('bad')</script></p>"
html()
может возвращать полноценный HTMLElement
, а не просто строку. Всё гибко.Шаблон предоставляет доступ к строкам и значениям до их объединения. Свойства
.strings
и .values
возвращают кортежи:name = "World"
template = t"Hello {name}!"
assert template.strings == ("Hello ", "!")
assert template.values == (name,)
Всегда будет на одну строку больше, чем значений. Например:
t"".strings == ("",)
t"{name}".strings == ("", "")
Можно просто пройтись по шаблону в цикле:
template = t"Hello {name}!"
contents = list(template)
assert contents[0] == "Hello "
assert contents[1].value == name
assert contents[2] == "!"
Для продвинутой обработки можно получить данные о каждой интерполяции:
template = t"Hello {name!s:>8}!"
interp = template.interpolations[0]
assert interp.value == name
assert interp.expression == "name"
assert interp.conversion == "s"
assert interp.format_spec == ">8"
Можно создать шаблон напрямую:
from string.templatelib import Template, Interpolation
template = Template(
"Hello ",
Interpolation(value="World", expression="name"),
"!"
)
T-строки — это:
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Senior Python Developer (Blockchain) — от 3500 до 4500 $, удалённо
Руководитель группы разработки Python — от 350 000 до 550 000 ₽, удалённо
Python developer (DDI) — от 250 000 ₽, гибрид (Москва)
Tech Lead Python — от 350 000 ₽, удалённо
Junior Python Developer — от 130 000 до 300 000 ₽, удалённо
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
Async-инициализация в Python: какие есть подходы
В Python нет нативной поддержки асинхронного
⬇️ Вот какие стратегии чаще всего используют — с плюсами и минусами.
1️⃣ @classmethod async def initialize()
🌥 Плюсы:
— Лаконично
— Хорошо отделяет sync и async логику
— Удобно для тестов
🌥 Минусы:
— Нет устоявшейся конвенции
— Может быть неочевидно для команды
🌥 Подходит для простых случаев без необходимости в очистке ресурсов.
2️⃣ Асинхронный контекстный менеджер (__aenter__ / __aexit__)
🌥 Плюсы:
— Устоявшийся паттерн (
— Удобно добавлять логику очистки в будущем
🌥 Минусы:
— Нужно писать
— Не всегда удобно, если объект нужен за пределами контекста
🌥 Подходит, если нужно управлять жизненным циклом ресурса.
3️⃣ Инициализация в фоне через create_task()
🌥 Плюсы:
— Можно запускать загрузку параллельно с другими задачами
— Подходит для высоконагруженных систем
🌥 Минусы:
— Сложнее в отладке
— Нужно явно проверять
— Нет встроенного механизма очистки
🌥 Хорошо подходит для внутренних компонентов или фреймворков, где поведение контролируется централизованно.
4️⃣ Внешний async-фабричный метод / билдер
Просто выносим всю асинхронную инициализацию за пределы класса.
🌥 Плюсы:
— Чистый и легко тестируемый код
— Гибко масштабируется
🌥 Минусы:
— Логика разнесена по разным местам
— Использование может стать чуть более многословным
🌥 Идеально, если важна читаемость и разделение ответственности.
5️⃣ await instance.ready()
Гибридный подход: конструктор sync, а использование — с явной асинхронной инициализацией.
🌥 Позволяет разделить создание и инициализацию, сохраняя контроль над потоком.
6️⃣ Запрет обычного __init__, только async-конструктор
🌥 Форсирует корректное использование через async-интерфейс.
▫️ Какой подход выбрать:
🤖
🤖
🤖
🤖 Async factory — тестируемость, масштабируемость
🤖
🤖
Библиотека питониста #буст
В Python нет нативной поддержки асинхронного
__init__
, поэтому приходится искать обходные пути, если объект требует асинхронной инициализации (например, получения ресурса через await get_resource()
). class Klass:
def __init__(self, resource):
self.resource = resource
@classmethod
async def initialize(cls):
resource = await get_resource()
return cls(resource)
— Лаконично
— Хорошо отделяет sync и async логику
— Удобно для тестов
— Нет устоявшейся конвенции
— Может быть неочевидно для команды
class Klass:
async def __aenter__(self):
self.resource = await get_resource()
return self
async def __aexit__(self, exc_type, exc, tb):
pass
— Устоявшийся паттерн (
async with
)— Удобно добавлять логику очистки в будущем
— Нужно писать
async with
при каждом использовании— Не всегда удобно, если объект нужен за пределами контекста
class Klass:
def __init__(self):
self.ready_event = asyncio.Event()
asyncio.create_task(self._load())
async def _load(self):
self.resource = await get_resource()
self.ready_event.set()
async def use(self):
await self.ready_event.wait()
await do_something_with(self.resource)
— Можно запускать загрузку параллельно с другими задачами
— Подходит для высоконагруженных систем
— Сложнее в отладке
— Нужно явно проверять
await ready_event.wait()
— легко забыть— Нет встроенного механизма очистки
Просто выносим всю асинхронную инициализацию за пределы класса.
— Чистый и легко тестируемый код
— Гибко масштабируется
— Логика разнесена по разным местам
— Использование может стать чуть более многословным
Гибридный подход: конструктор sync, а использование — с явной асинхронной инициализацией.
klass = Klass()
await klass.ready()
class Klass:
def __new__(cls, *args, **kwargs):
raise RuntimeError("Используйте `await Klass.create()`")
@classmethod
async def create(cls):
self = super().__new__(cls)
self.resource = await get_resource()
return self
initialize()
— простая async-инициализация без очистки__aenter__
/__aexit__
— нужна очистка или сложный жизненный циклcreate_task()
+ Event
— нужно запускать инициализацию в фоне.ready()
— чистое разделение этапов__new__
+ async — строгий контроль над созданиемБиблиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда Django-запросы вытягивают из базы больше данных, чем нужно, это тормозит работу приложения. Чтобы ускорить выполнение и уменьшить нагрузку, можно использовать методы:
defer()
— откладывает загрузку указанных полей до их фактического использования only()
— загружает только указанные поля, остальные — по запросу exclude()
— фильтрует объекты, исключая ненужныеВ статье — практические примеры на базе веб-приложения для агентства недвижимости: как применять эти методы, чтобы получать только нужные данные и ускорять запросы.
🔗 Подробнее в статье: https://proglib.io/sh/2vagPRorTU
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
🧰 Инструмент недели: ViperView — визуализатор pip-пакетов
Если вы хотите лучше понять, какие библиотеки занимают место в вашем Python-окружении — попробуйте ViperView. Это простое и удобное десктопное приложение с графическим интерфейсом на PyQt5.
✅ Возможности:
• Отображение всех установленных pip-пакетов: версия, размер и путь
• Интерактивная диаграмма с 20 самыми «тяжёлыми» библиотеками
• Поиск и фильтрация в реальном времени
• Экспорт информации в CSV
↗️ ViperView поможет вам наглядно оценить структуру окружения и освободить место, если нужно.
🔗 Репозиторий инструмента: https://clc.to/Jl4t3g
Библиотека питониста #буст
Если вы хотите лучше понять, какие библиотеки занимают место в вашем Python-окружении — попробуйте ViperView. Это простое и удобное десктопное приложение с графическим интерфейсом на PyQt5.
• Отображение всех установленных pip-пакетов: версия, размер и путь
• Интерактивная диаграмма с 20 самыми «тяжёлыми» библиотеками
• Поиск и фильтрация в реальном времени
• Экспорт информации в CSV
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда сроки горят, а разработчиков не хватает
Нехватка квалифицированных разработчиков, срывы дедлайнов и перегруз команды — эти проблемы знакомы большинству IT-руководителей. В условиях растущей конкуренции найти баланс между качеством реализации, сроками и бюджетом становится всё сложнее, особенно когда проект требует редких компетенций или быстрого масштабирования.
Решение проблемы — задействовать дополнительные ресурсы на аутсорсе или аутстаффе. Например, обратиться в Proglib. Да-да, мы запустили свою студию веб-разработки!
Что мы предлагаем:
• Опытные специалисты для аутстаффа (frontend, backend, DevOps, UI/UX, PM, BA)
• Полноценная разработка проектов под ключ
• Гибкое масштабирование команды под потребности клиента
• Прозрачная коммуникация и регулярная отчетность
Для каждого проекта формируется индивидуальная команда, исходя из конкретных потребностей заказчика.
Заполните форму, чтобы ускорить свою разработку 👉 https://forms.yandex.ru/u/67e548a4eb614622efa0bcb2/
Нехватка квалифицированных разработчиков, срывы дедлайнов и перегруз команды — эти проблемы знакомы большинству IT-руководителей. В условиях растущей конкуренции найти баланс между качеством реализации, сроками и бюджетом становится всё сложнее, особенно когда проект требует редких компетенций или быстрого масштабирования.
Решение проблемы — задействовать дополнительные ресурсы на аутсорсе или аутстаффе. Например, обратиться в Proglib. Да-да, мы запустили свою студию веб-разработки!
Что мы предлагаем:
• Опытные специалисты для аутстаффа (frontend, backend, DevOps, UI/UX, PM, BA)
• Полноценная разработка проектов под ключ
• Гибкое масштабирование команды под потребности клиента
• Прозрачная коммуникация и регулярная отчетность
Для каждого проекта формируется индивидуальная команда, исходя из конкретных потребностей заказчика.
Заполните форму, чтобы ускорить свою разработку 👉 https://forms.yandex.ru/u/67e548a4eb614622efa0bcb2/
🎬 Все декораторы в Python — за 9 минут
Краткий, но ёмкий видео-гид, в котором вы узнаете, как работают декораторы, зачем они нужны и как применять их для написания более чистого и эффективного кода.
💡 Что вы узнаете:
— Что такое декораторы в Python
— Как использовать
— Как создавать собственные декораторы, чтобы упростить архитектуру кода
📌 Основные моменты:
0:00 — Введение и понятие декораторов
3:11 — Все встроенные декораторы Python
🔗 Ссылка на видео: https://clc.to/dBNl5Q
Библиотека питониста #буст
Краткий, но ёмкий видео-гид, в котором вы узнаете, как работают декораторы, зачем они нужны и как применять их для написания более чистого и эффективного кода.
💡 Что вы узнаете:
— Что такое декораторы в Python
— Как использовать
@staticmethod
, @classmethod
и @property
— Как создавать собственные декораторы, чтобы упростить архитектуру кода
📌 Основные моменты:
0:00 — Введение и понятие декораторов
3:11 — Все встроенные декораторы Python
🔗 Ссылка на видео: https://clc.to/dBNl5Q
Библиотека питониста #буст
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
📈 Как «ленивая разработка» захватывает IT-рынок
Пока мы выстраиваем архитектуру, пишем тесты и спорим о лучших практиках, рынок всё активнее обживают те, кто вообще не пишет код. Low-code и no-code решения не просто живы — они становятся нормой для бизнеса.
Порог входа минимальный, скорость разработки — бешеная, а заказчику всё равно, написано ли это на Java или накликано в визуальном редакторе. Вопрос: как долго останется актуальной классическая разработка?
🔗 Подробнее в статье
🐸 Библиотека джависта
Пока мы выстраиваем архитектуру, пишем тесты и спорим о лучших практиках, рынок всё активнее обживают те, кто вообще не пишет код. Low-code и no-code решения не просто живы — они становятся нормой для бизнеса.
Порог входа минимальный, скорость разработки — бешеная, а заказчику всё равно, написано ли это на Java или накликано в визуальном редакторе. Вопрос: как долго останется актуальной классическая разработка?
🔗 Подробнее в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
Собрали топовые материалы, которые наши подписчики сохраняют чаще всего.
Эту подборку мы будем регулярно пополнять, поэтому сохраняйте тонну пользы, чтобы не потерять!
1. uv — новый стандарт в управлении Python-проектами и пакетами
2. Бесплатный курс по фулстек-разработке — реальность
3. Интерактивная карта Python‑пакетов PyPI
4. Устали от хаоса в JSON?
5. Автоматизация с Python: от рутинных задач до DevOps
6. Poetry vs UV: какой менеджер пакетов лучше для Python?
7. Чистый код на Python
Please open Telegram to view this post
VIEW IN TELEGRAM
Мы не могли пройти мимо нашумевшего тренда и попросили ИИ перенести Python во вселенную Миядзаки.
Как вам образ? Расскажите в комментариях ↓
Please open Telegram to view this post
VIEW IN TELEGRAM
🎯 Команда дня: `@overload` в Python
Пример:
—
—
— Типизация подскажет ошибку, если вы вызовете
Другой кейс — когда нужен только один аргумент из двух:
Так можно добиться:
✅
✅
🙅♂️
Бонус:
▶️ Попытка передать yellow вызовет ошибку ещё до выполнения кода.
▶️ @overload и Literal — мощные инструменты статической проверки, особенно в больших проектах, где важна точная типизация.
Библиотека питониста #буст
@overload
из модуля typing
позволяет указать несколько сигнатур для одной функции. Это особенно полезно, когда возвращаемый тип зависит от аргументов — и вы хотите, чтобы типизация отражала это поведение.Пример:
from typing import Literal, overload
@overload
def transform(data: str, mode: Literal["split"]) -> list[str]: ...
@overload
def transform(data: str, mode: Literal["upper"]) -> str: ...
def transform(data: str, mode: Literal["split", "upper"]) -> list[str] | str:
return data.split() if mode == "split" else data.upper()
—
transform(..., "split")
→ list[str]
—
transform(..., "upper")
→ str
— Типизация подскажет ошибку, если вы вызовете
append()
у строки или .lower()
у спискаДругой кейс — когда нужен только один аргумент из двух:
@overload
def get_user(id: int = ..., username: None = None) -> User: ...
@overload
def get_user(id: None = None, username: str = ...) -> User: ...
def get_user(id: int | None = None, username: str | None = None) -> User: ...
Так можно добиться:
get_user(id=1)
get_user(username="John")
get_user(id=1, username="John")
— не соответствует ни одной сигнатуреБонус:
Literal
позволяет ограничить значения аргументов строками:def set_color(color: Literal["red", "blue", "green"]) -> None: ...
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодняшний интернет — это не только мемы и котики, но и автозапуск видео, всплывающие окна, перегруженный JavaScript, странные архитектурные решения прошлого.
В статье разбираем:
Мечты о «перезапуске» веба с чистого листа — это не фантастика, а повод задуматься: а не пора ли нам пересмотреть старые решения?
Please open Telegram to view this post
VIEW IN TELEGRAM