Все самое полезное для питониста в одном канале. Список наших каналов: https://t.me/proglibrary/9197 Учиться у нас: https://proglib.io/w/d7f1e6ed Обратная связь: @proglibrary_feedback_bot По рекламе: @proglib_adv Прайс: @proglib_advertising
📚Напоминаем про наш полный курс «Самоучитель по 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
Лишь бы не в выходные... 😂
Библиотека питониста #развлекалово
Участвуйте в Хакатоне 1Т!
❗️Создайте алгоритм управления дронами для тушения пожаров и выиграйте до 250 000 рублей!
🕑Срок проведения: 1–25 апреля.
Приглашаем всех, кто:
⚡️Владеет технологиями ИИ
⚡️Может разрабатывать решения на Python
⚡️Готов испытать свои силы и решить интересную задачу!
Нужно:
Написать алгоритм на Python для эффективного тушения пожаров беспилотниками. Они должны:
🔹определять точки старта, точки смены огнетушителей и очаги возгорания,
🔹оперативно менять огнетушители на базе,
🔹координировать маршруты для эффективного пожаротушения.
Что вас ждет?
✅Два трека: Базовый — разработка алгоритма для одного беспилотника и Продвинутый — алгоритм для роя из пяти БВС.
✅Поддержка экспертов и крутое комьюнити.
✅Денежные призы, мерч 1Т и сертификат.
Призы
Трек Первый взлёт
1 место — 50 000 ₽
2 место — 30 000 ₽
3 место — 20 000 ₽
Трек Воздушный рой
1 место — 250 000 ₽
2 место — 150 000 ₽
3 место — 100 000 ₽
👌Заявки до 17 апреля,
регистрация: hackathon.1t.ru.
Реклама. ООО "1Т". ИНН 7705908531.
💭 Холивар: когда писать код на работе — по офисному графику или в моменты вдохновения?
Вот история, которая заставляет задуматься. Девушка подала резюме, и ей позвонили в 9 утра, но она ещё спала. Её кандидатуру сразу отклонили со словами: «Мы не хотим сотрудничать с человеком, который спит до 9 утра». Неужели, чтобы считаться профессионалом, нужно работать строго с 9:00 до 18:00?
Как бы вы отреагировали на такую ситуацию? Как вы организуете свою работу над кодом?
Го в комменты, устроим холивар!👇
❤️ — команда «Офисный график»: «Кодить надо с 9 до 18, как в нормальной компании! Дисциплина — залог успеха. Если ты не можешь работать по расписанию, то как ты дедлайны будешь соблюдать? И вообще, в офисе вся команда на месте, сразу можно обсудить баг или фичу!»
👍 — команда «Когда пишется»: «Код — это творчество! Я могу в 3 часа ночи написать шедевр, который за день в офисе не родится. Главное — результат, а не то, сижу ли я за компом с 9 утра.»
Библиотека питониста #развлекалово
🔹 How to: как работают генераторы в Python
Генераторы — мощный инструмент для итераций, особенно при работе с большими данными. В отличие от обычных функций, они вычисляют значения лениво, выдавая их по запросу и экономя память. Это делает код более эффективным и удобным для повторного использования.
➡️ Принцип работы
Вместо возврата всех значений сразу, генератор использует yield
, который приостанавливает выполнение функции, сохраняя её состояние:
def simple_generator():
print("Первый yield")
yield 1
print("Второй yield")
yield 2
gen = simple_generator()
print(next(gen)) # Первый yield → 1
print(next(gen)) # Второй yield → 2
next()
выполнение продолжается с места, где остановилось. Это позволяет работать с последовательностями, не загружая их полностью в память.def fibonacci_generator(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b
import sys
def list_numbers(n):
return [i for i in range(n)]
def generator_numbers(n):
return (i for i in range(n))
print(sys.getsizeof(list_numbers(1000000))) # 8448728 байт
print(sys.getsizeof(generator_numbers(1000000))) # 208 байт
squares_list = [x * x for x in range(10)] # Обычный список
squares_gen = (x * x for x in range(10)) # Генератор
from itertools import chain, filterfalse
result = chain((x * x for x in range(10)), (y + 10 for y in range(5)))
odd_squares = filterfalse(lambda x: x % 2 == 0, (x * x for x in range(10)))
Python Книги - канал для скачивания Python книг только на русском языке
Что в нашем канале:
1. Книги по питону, которые помогут вам подготовится к собеседованию.
2. Книги на русском языке
3. Много книг для начинающих
4. Все книги можно скачать в 2 клика
Подписывайтесь и качайте книги: @pythonknigiru
Реклама. Киренкина Марина Дмитриевна, ИНН 345702417736. Erid 2Vtzqx6XBP6
🤓 Промпт, который сделает обучение Python проще
Учить сложные темы бывает непросто, но что, если можно разбить их на простые и понятные части? Делимся мощным промптом для ChatGPT, который поможет разобраться в любом сложном аспекте Python — от асинхронности до метапрограммирования.
⭐ Промпт:
I need help breaking down [конкретная тема] into smaller, simpler parts that are easier to understand.
Identify the most important 20% of learnings that will help me understand 80% of the subject.
Use analogies and real-life examples to explain each concept in a relatable way.
The explanation should focus on making the topic clear and engaging while connecting it to everyday experiences or situations.
Additionally, suggest tips or questions I can use to check my understanding of the material.
asyncio
через повседневные сценарии metaclass
с аналогиями из конструкторов LEGO decorators
, представив их как модульные дополнения в кафе🎉 PEP 751 (стандартный lockfile для Python) принят
🔒 После многих лет работы (и сотен сообщений в обсуждениях) Python-сообщество наконец-то приняло стандартный формат lockfile.
Разработчики всех ключевых инструментов для управления зависимостями участвовали в обсуждении, и теперь они либо полностью перейдут на новый формат (заменяя, например, poetry.lock
или uv.lock
), либо добавят поддержку экспорта в этот формат.
Что это значит для нас?
• Единый стандарт вместо множества requirements.txt
• Более простая и надежная развертка проектов
• Совместимость между инструментами для управления зависимостями
🔗 Подробности в PEP 751
🔗 Обсуждение на Python Discuss
Библиотека питониста #свежак
🎭 Dev Memes: 1 апреля, а баги всё те же
Сегодня день официально разрешённого троллинга — и мы не могли пройти мимо. Собрали подборку мемов для Go-разработчика, которые вызывают лёгкое желание уволиться.
👉 Всё это — из нашего мемного канала «Библиотека IT-мемов»
Библиотека питониста
🧩 Python-загадка
Пора сыграть в любимую всеми игру: что делает этот код?
def foo():
try:
return os._exit()
finally:
return False
import os
foo()
None
False
Возвращает False. Хотите знать почему?
🟢Обычно os._exit завершает процесс без выполнения «обработчиков очистки» (блоков finally). Однако ему нужен один аргумент. Этот фрагмент кода забывает передать код выхода, поэтому вместо завершения процесса он выбрасывает TypeError. Затем блок finally тихо подавляет исключение из-за return.
🟢Возврат из блока finally на самом деле так часто используется неправильно, что разработчики Python планируют сделать так, чтобы в будущем выпуске это вызывало SyntaxWarning.
🟢Можно было бы подумать, что import os идёт после определения функции. Но в Python используется динамическая область видимости, так что это нормально.
🟢Также можно перепутать sys.exit с os._exit. sys.exit работает, выбрасывая исключение SystemExit, которое было бы перехвачено и подавлено блоком finally. Но _exit напрямую завершает процесс:
-> Завершает процесс с кодом состояния n, не вызывая обработчики очистки, не сбрасывая буферы stdio и т.д.
🐍 Python новости
🚀 Релизы и инструменты:
— IPython 9— новые возможности интерактивной оболочки
— Mesop 1.0 — новый UI-фреймворк на Python для веб-приложений
— Flet — фреймворк для кроссплатформенных мобильных и десктопных приложений
🔬 Глубже в Python:
— Removing deprecated config format? Что может пойти не так? — удаление устаревших конфигураций в setuptools вызвало проблемы (но уже откатили)
— Django Template Components — новый подход к компонентам в Django
— Smoke-тестирование Django Admin — защита от неожиданных ошибок
📚 Обучение и лучшие практики:
— Как уменьшить размер Docker-образа на 80%
— Poetry, Rye или UV? — что выбрать для управления зависимостями
— Как построить Hot Module Replacement в Python — обновляем код без перезапуска
📢 Анонсы и события:
— Google Summer of Code 2025 — открыт приём заявок
Библиотека питониста #свежак
💬 Холивар: Python-разработка — строгая структура или гибкость?
Python — гибкий язык, и писать на нём можно в разных парадигмах. Но что удобнее, понятнее и «правильнее»?
1️⃣ ООП — классы, инкапсуляция, строгая архитектура. Подходит для больших проектов, когда важна масштабируемость и организация кода:
class NumberProcessor:
def __init__(self, numbers):
self.numbers = numbers
def filter_even(self):
self.numbers = [n for n in self.numbers if n % 2 == 0]
return self
def square(self):
self.numbers = [n**2 for n in self.numbers]
return self
def get_result(self):
return self.numbers
processor = NumberProcessor([1, 2, 3, 4, 5, 6])
result = processor.filter_even().square().get_result()
print(result) # [4, 16, 36]
from functools import reduce
def filter_even(numbers):
return list(filter(lambda x: x % 2 == 0, numbers))
def square(numbers):
return list(map(lambda x: x**2, numbers))
numbers = [1, 2, 3, 4, 5, 6]
result = square(filter_even(numbers))
print(result) # [4, 16, 36]
numbers = [1, 2, 3, 4, 5, 6]
result = [n**2 for n in numbers if n % 2 == 0]
print(result) # [4, 16, 36]
🥇 Прокачай Power BI: создаем bullet-chart для наглядного сравнения данных
🎯 Устали от вопросов типа «Ну и что это значит для бизнеса?» после презентации отчетов?
Bullet-chart — мощный инструмент, который сразу показывает, насколько фактические показатели соответствуют целевым. В этой статье разберем, как правильно читать такой график и шаг за шагом создадим его в Power BI.
Готовы визуализировать данные так, чтобы они говорили сами за себя?
👍 Тогда поехали, ссылка на статью: https://proglib.io/sh/hcrRdAuqT5
Библиотека дата-сайентиста
🚀 Открыт прием заявок на Google Summer of Code 2025
С 2005 года эта программа помогает студентам и начинающим разработчикам погрузиться в реальный мир программирования, работая над крутыми проектами.
📅 Дедлайн подачи заявок: 8 апреля 2025 года.
📍 Подробности и форма заявки: https://clc.to/6wAHEg
Библиотека питониста #свежак
🤓 Вопросы подписчиков: как перейти от Jupyter Notebooks к продакшн-коду в индустрии?
Сегодня мы делимся вопросом от подписчика, который учился и разрабатывал проекты в Anaconda Notebooks, но стремится выйти на новый уровень и освоить написание продакшн-кода на Python.
💬 Он пишет:
Я начинал учиться и программировать в Anaconda Notebooks — это отличный инструмент для учебы и исследований. Однако в индустрии подход к коду совсем другой. Там он структурирован: используются субпапки, главный .py-файл объединяет всё, а развертывание, API и тесты разнесены по отдельным директориям. Это как готовое здание с надежным фундаментом и продуманной структурой, где все части взаимосвязаны.
Если вы работаете с Python в индустрии, не могли бы вы посоветовать, как перейти от стиля работы в ноутбуках к созданию продакшн-кода?
🕵️ Играем в ревью: сможете найти все 5 багов?
Быстрая проверка скиллов. В этом кусочке кода спрятаны 5 ошибок.
Цель программы: для каждого числа в списке определить, является ли оно простым (prime), и вернуть список булевых значений.
def is_prime(n):
if n <= 1:
return False
for i in range(2, n//2):
if n % i == 0:
return False
return True
def check_primes(numbers):
result = []
for num in numbers:
result.append(is_prime(num))
return result
nums = [0, 1, 2, 3, 4, 5, 10, 11, 13, 15, 17, 19]
print(check_primes(nums))
[False, False, True, True, True, True, False, True, True, False, True, True]
🆒 Собираем идеальный GUI на Python: 8 библиотек 2025 года
➡️ Tkinter — просто и по делу
➡️ TkinterPyQt — строго и функционально
➡️ Kivy — на мобилку и не только
Мы собрали лучшие библиотеки для создания графических интерфейсов на Python в 2025 — от классики до свежих решений.
🐸 Хотите красивый и удобный UI? Начните с этого списка: https://proglib.io/sh/8Z6Yl7fMgS
Библиотека питониста
🐛 Фишка инструмента: учимся дебаггингу осознанно с py-bugger
Обычно отладка — это реактивный процесс: мы исправляем баги, когда они появляются. Но что, если учиться дебаггингу так же, как любой другой навык — от простого к сложному?
✅ Что делает py-bugger:
🔘 Добавляет ошибки в код: можно целенаправленно внедрять баги разных типов в проект (например, ModuleNotFoundError, IndentationError)
🔘 Позволяет тренироваться в отладке на реальных ошибках, но в контролируемых условиях
🔘 Отслеживает изменения: внесённые баги сохраняются в коммите, и их можно легко найти через git diff
✅ Как установить и использовать
1⃣ Устанавливаем py-bugger
:
pip install python-bugger
name_picker.py
, который выбирает случайное имя из списка: python name_picker.py
# The winner: Alice!
ModuleNotFoundError
: py-bugger --exception-type ModuleNotFoundError
Introducing a ModuleNotFoundError...
Modified file.
python name_picker.py
Traceback (most recent call last):
File "name_picker.py", line 1, in <module>
import rando
ModuleNotFoundError: No module named 'rando'
git diff
: git diff
py-bugger -e AttributeError -n 3 --target-file my_script.py
-e AttributeError
— добавит ошибку типа AttributeError
-n 3
— добавит три ошибки--target-file my_script.py
— внесёт баги в конкретный файл🎉 Выпущен Django 5.2
В новой версии представлено множество улучшений и новых возможностей.
🌟 Вот несколько ключевых изменений:
• Все модели автоматически импортируются в shell по умолчанию
• Поддержка составных первичных ключей
• Переопределение BoundField стало значительно проще: теперь это можно делать на уровне формы, поля или проекта
🔗 Анонс релиза: https://clc.to/lV9Qig
Библиотека питониста #свежак
Ну, и такое бывало... 😂
Библиотека питониста #развлекалово
📣 Программисты, нужен ваш совет!
Пилим крутую подборку ноутов для кодеров в 2025-м и хотим собрать реальный фидбек от тех, кто в теме!
Какой ноут спасает вас в кодинге и почему?
Расскажите все:
⭐ Что за зверь (модель, начинка)
⭐ Где жмет и где радует в ежедневной работе
⭐ На какие фишки смотреть при выборе
⭐ Как вам с ним живется
Топовые советы попадут в нашу статью. Сделаем годный гайд, который реально поможет коллегам!
Делитесь в комментах. ⬇️
Библиотека питониста
🪄 Визуальные вычисления в Power BI: прокачиваем условное форматирование
Теперь настраивать условное форматирование в Power BI можно без сложных DAX-формул! Разбираем, как новые визуальные вычисления помогают создавать динамичные, адаптивные и стильные отчеты, которые мгновенно реагируют на изменения данных.
⭐️ Пора сделать отчеты действительно интерактивными!
🔗 Ссылка на статью: https://proglib.io/sh/lsb0fEuYSv
Библиотека дата-сайентиста
😎 Инструмент недели: стань звездой разработки за 30 секунд
🎩 1 апреля — лучший день, чтобы апгрейдить свой статус в офисе!
rust-stakeholder — CLI-инструмент, который генерирует абсолютно бессмысленный, но очень крутой вывод в терминале.
💡 Помни: важна не реальная работа, а то, насколько сложным выглядит терминал, когда рядом проходит VP of Engineering.
🔥 Фичи, которые не дают никакой пользы, но выглядят суперважными:
✓ Dev-симуляции — решай «задачи CERN», листая Reddit
✓ Техножаргон — «Неевклидова оптимизация данных» (никто не поймёт!)
✓ Прогресс-бары — работа кипит, пока ты пьёшь кофе
✓ Фейк-сеть — API-запросы в никуда
✓ Командная активность — невидимые коллеги шлют «pull requests»
✓ Смена ролей — от backend до blockchain за секунду
Библиотека питониста #буст
☀️ IT-календарь: главные релизы апреля
📅 Важные релизы:
• Python 3.14 alpha 7 — ожидается 8 апреля 2025 года. Предварительный релиз для тестирования, не предназначен для продакшн-сред.
• Python 3.12.9 — последний багфикс-релиз перед окончанием активной поддержки 2 апреля 2025 года. Далее только обновления безопасности.
• Python 3.13.3 — предполагаемый релиз с исправлениями ошибок, приблизительная дата апрель 2025 года.
• Django 5.2 — ожидается финальный релиз в апреле 2025 года. Вероятно, получит статус LTS.
🌟 Ключевые мероприятия:
• PyCon DE & PyData 2025 — состоится в Дармштадте, Германия, 23-25 апреля.
• DjangoCon Europe 2025 — пройдет в Дублине, Ирландия, 23-27 апреля. Главное событие для всех, кто работает с Django.
🎉 Какой релиз или мероприятие вы ждете больше всего? Делитесь в комментариях!
Библиотека питониста #свежак
📌 Методы экземпляра, класса и статические методы в Python
Хотите писать чистый и поддерживаемый код? Давайте разберем, чем отличаются эти три типа методов в Python.
🔹 Методы экземпляра (`self`):
✓ Работают с конкретным объектом
✓ Изменяют атрибуты экземпляра
✓ Доступ к атрибутам класса через self.__class__
class MyClass:
def method(self):
return "Метод экземпляра", self
class MyClass:
@classmethod
def class_method(cls):
return "Метод класса", cls
class MyClass:
@staticmethod
def static_method():
return "Статический метод"
class Pizza:
def __init__(self, ingredients):
self.ingredients = ingredients
@classmethod
def margherita(cls):
return cls(["моцарелла", "помидоры"])
@staticmethod
def circle_area(r):
import math
return r ** 2 * math.pi
pizza = Pizza.margherita() # Классовый метод
print(Pizza.circle_area(4)) # Статический метод
Холивар: Python-разработка — строгая структура или гибкость?
Читать полностью…Когда твоя программа работает, но ты знаешь, что внутри 😏
Библиотека питониста #развлекалово
Зимний режим OFF. Весна начинается с апгрейда.
Если чувствуешь, что за зиму навыки подзастыли — пора их разморозить.
📦 Включили весеннюю распродажу: скидка –35% на курсы до конца марта.
Выбирай направление и выходи из спячки:
— Алгоритмы и структуры данных — чтобы собеседования в Яндекс, Ozon и другие были как уровень easy
— Математика для Data Science — для тех, кто не хочет просто «жать на кнопки», а понимать, что под капотом
— Архитектуры и шаблоны — если хочется мыслить как senior и прокачать системное мышление
— Python, Frontend, основы IT — для тех, кто стартует путь в разработке
👾 Proglib Academy — это как старая добрая 8-битная игра, но вместо врагов — практические задачи и собеседования.
Мы просто упаковали сложное обучение в пиксельную обёртку, чтобы тебе было чуть веселее прокачиваться.
🧠 Отогревай мозги, прокачивай скиллы и хватай свой power-up до конца марта.
👉 Выбрать курс
🔝 Команда дня: разбираем `functools.partial` в Python
Модуль functools
в Python содержит полезный инструмент — ctools,
который позволяет создавать новые функции, фиксируя часть аргументов уже существующей функции. Это называется частичное применение функций.
🔹 Как это работает?
С помощью partial
можно «заморозить» часть аргументов, чтобы создать новую функцию с меньшим числом входных параметров.
📌 Пример: фиксируем аргумент
from functools import partial
def multiply(x, y):
return x * y
double = partial(multiply, 2) # "Фиксируем" x как 2
print(double(5)) # Вывод: 10 (2 * 5)
double(5)
эквивалентно multiply(2, 5)
, потому что 2
уже зафиксировано.def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"
say_hi = partial(greet, greeting="Hi")
print(say_hi("Alice")) # Вывод: Hi, Alice!
say_hi("Alice")
всегда будет использовать "Hi"
в качестве приветствия.partial
?🤖 IT-выживание 2025: как не вылететь с рынка труда в эпоху LLM
В 2025-м айтишникам приходится несладко: старые скиллы уже не в цене, LLM наступают на пятки, а работодатели хотят все и сразу.
👍 Делимся инсайдами, как выжить в новой реальности и не потерять работу в эпоху тотальной оптимизации.
👉 Ссылка на статью: https://proglib.io/sh/zEruLHxYno
Библиотека дата-сайентиста