Telegram Web Link
🤓 Промпт, который сделает обучение 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.



Как это работает:
— Разбивает сложную тему на ключевые 20% знаний, которые дадут 80% понимания
— Приводит аналоги и примеры из жизни (например, асинхронность как готовка в ресторане)
— Помогает проверить себя, предлагая вопросы для самопроверки

Примеры использования:
— Разобраться в asyncio через повседневные сценарии
— Понять работу metaclass с аналогиями из конструкторов LEGO
— Прояснить decorators, представив их как модульные дополнения в кафе


Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
📣 Программисты, нужен ваш совет!

Пилим крутую подборку ноутов для кодеров в 2025-м и хотим собрать реальный фидбек от тех, кто в теме!

Какой ноут спасает вас в кодинге и почему?

Расскажите все:
Что за зверь (модель, начинка)
Где жмет и где радует в ежедневной работе
На какие фишки смотреть при выборе
Как вам с ним живется

Топовые советы попадут в нашу статью. Сделаем годный гайд, который реально поможет коллегам!

Делитесь в комментах. ⬇️

Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🔹 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


Такой генератор можно использовать для обработки больших последовательностей без лишних затрат памяти.

➡️ Генераторы vs. списки
Генераторы экономят память, так как не хранят все элементы в памяти:
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 байт


Разница очевидна: генератор занимает всего 208 байт, тогда как список — 8+ мегабайт!

➡️ Генераторные выражения
Аналогично списковым включениям, но работают лениво:
squares_list = [x * x for x in range(10)]  # Обычный список
squares_gen = (x * x for x in range(10)) # Генератор


➡️ Комбинирование генераторов
С помощью itertools генераторы можно объединять и фильтровать:
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)))



➡️ Когда использовать генераторы
— Обработка больших данных без перегрузки памяти
— Потоковая обработка (например, чтение файлов)
— Создание бесконечных последовательностей
— Оптимизация скорости и эффективности кода

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉 Выпущен Django 5.2

В новой версии представлено множество улучшений и новых возможностей.

🌟 Вот несколько ключевых изменений:
• Все модели автоматически импортируются в shell по умолчанию
• Поддержка составных первичных ключей
• Переопределение BoundField стало значительно проще: теперь это можно делать на уровне формы, поля или проекта

🔗 Анонс релиза: https://clc.to/lV9Qig

Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
💭 Холивар: когда писать код на работе — по офисному графику или в моменты вдохновения?

Вот история, которая заставляет задуматься. Девушка подала резюме, и ей позвонили в 9 утра, но она ещё спала. Её кандидатуру сразу отклонили со словами: «Мы не хотим сотрудничать с человеком, который спит до 9 утра». Неужели, чтобы считаться профессионалом, нужно работать строго с 9:00 до 18:00?

Как бы вы отреагировали на такую ситуацию? Как вы организуете свою работу над кодом?
Го в комменты, устроим холивар!👇

❤️ — команда «Офисный график»: «Кодить надо с 9 до 18, как в нормальной компании! Дисциплина — залог успеха. Если ты не можешь работать по расписанию, то как ты дедлайны будешь соблюдать? И вообще, в офисе вся команда на месте, сразу можно обсудить баг или фичу!»

👍 — команда «Когда пишется»: «Код — это творчество! Я могу в 3 часа ночи написать шедевр, который за день в офисе не родится. Главное — результат, а не то, сижу ли я за компом с 9 утра.»

P.S. Инструкция о том, как оставить комментарий

Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🐛 Фишка инструмента: учимся дебаггингу осознанно с py-bugger

Обычно отладка — это реактивный процесс: мы исправляем баги, когда они появляются. Но что, если учиться дебаггингу так же, как любой другой навык — от простого к сложному?

Что делает py-bugger:
🔘 Добавляет ошибки в код: можно целенаправленно внедрять баги разных типов в проект (например, ModuleNotFoundError, IndentationError)
🔘 Позволяет тренироваться в отладке на реальных ошибках, но в контролируемых условиях
🔘 Отслеживает изменения: внесённые баги сохраняются в коммите, и их можно легко найти через git diff

Как установить и использовать

1⃣ Устанавливаем py-bugger:
pip install python-bugger


2⃣ Запускаем тестовый Python-скрипт name_picker.py, который выбирает случайное имя из списка:
python name_picker.py
# The winner: Alice!


3⃣ Внедряем в этот код ошибку ModuleNotFoundError:
py-bugger --exception-type ModuleNotFoundError


Вы увидите сообщение:
Introducing a ModuleNotFoundError...
Modified file.


4⃣ Теперь запускаем скрипт снова и видим ошибку:
python name_picker.py
Traceback (most recent call last):
File "name_picker.py", line 1, in <module>
import rando
ModuleNotFoundError: No module named 'rando'


Задача — найти и исправить ошибку.

5⃣ Если застряли, можно посмотреть внесённые изменения через git diff:
git diff


Гибкие настройки `py-bugger`
Вы можете настроить тип ошибок, количество багов и целевой файл/директорию:

py-bugger -e AttributeError -n 3 --target-file my_script.py


Здесь:
🔘 -e AttributeError — добавит ошибку типа AttributeError
🔘 -n 3 — добавит три ошибки
🔘 --target-file my_script.py — внесёт баги в конкретный файл

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒 Собираем идеальный GUI на Python: 8 библиотек 2025 года

➡️ Tkinter — просто и по делу
➡️ PyQt — строго и функционально
➡️ Kivy — на мобилку и не только

Мы собрали лучшие библиотеки для создания графических интерфейсов на Python в 2025 — от классики до свежих решений.

🐸 Хотите красивый и удобный UI? Начните с этого списка: https://proglib.io/sh/8Z6Yl7fMgS

Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
🕵️ Играем в ревью: сможете найти все 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]


🎯 Ваша задача — найти все 5 ошибок. Пишите свои ответы в комментариях — обсудим вместе!

👀 Ответ выложу позже.

P.S. Инструкция о том, как оставить комментарий

Библиотека питониста #развлекалово
Please open Telegram to view this post
VIEW IN TELEGRAM
📚Напоминаем про наш полный курс «Самоучитель по 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
🐍 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

Библиотека питониста #свежак
✍🏻 Что такое wheel и eggs в Python? Какая между ними разница?

✍🏻 Python wheel
— это стандартный формат установки дистрибутивов Python, который содержит все файлы и метаданные, необходимые для установки. Файл WHL также содержит информацию о версиях и платформах Python, поддерживаемых этим файлом. Расширение файла wheel — .whl

✍🏻 Python egg — это сжатый архив ZIP, содержащий исходные файлы приложения Python вместе с метаинформацией о дистрибутиве. Расширение файла egg — .egg

Основная разница заключается в том, что wheel предоставляет более простой и надежный способ установки пакетов. В отличие от eggs, он не требует установки дополнительных зависимостей и обеспечивает более быстрое время установки. Кроме того, wheel поддерживает все платформы, на которых может работать Python.


Библиотека собеса по Python
Что выведет код сверху?

👾 — 24
👍 — 1
🥰 — 0
⚡️ — 120

Библиотека задач по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Режим агента в VS Code — теперь для всех

Режим агента (Agent mode) официально открыт для всех пользователей Visual Studio Code!

Это как напарник-программист, который сам решает задачи: копается в коде, правит файлы, запускает команды и чинит ошибки, пока всё не заработает.

Что он может:
➡️ Понимает многошаговые задачи: редактирует код, следит за ошибками компиляции/линтинга и сам их исправляет
➡️ Сам определяет, какие файлы нужно изменить — вы просто ставите задачу
➡️ Интегрируется с внешними сервисами и инструментами через MCP и расширения

Как включить:

Включить режим агента можно в Chat View, выбрав Agent в настройках chat.mode и активировав chat.agent.enabled. Если параметр не отображается — обновите VS Code до последней версии и перезапустите.

🔗 Детали обновления: https://clc.to/1lqy9g

Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 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 ещё и быстрее, чем цикл.

2️⃣ Проверка условия для элементов

Пример с 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 для "все элементы") делает код выразительнее.

3️⃣ Поиск первого подходящего значения

С 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 — значение по умолчанию, если ничего не найдено.

4️⃣ Сбор элементов до условия

С 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?

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🧱⛏️ Чекни свой крафт: 8 признаков, что разработчик слишком залип в Minecraft

Думаешь, что твоя продуктивность падает из-за багов в коде? А может, все дело в том, что ты мысленно фармишь крипперов, пока твой PM объясняет задачу?

😎 Пройди наш тест и узнай, насколько глубоко ты провалился в пиксельную кроличью нору!

👉 Пройти тест

Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
Питонисты!

Проголосуйте за наш канал, и в сторис мы опубликуем топ материалов, которые должен прочитать каждый питонист.

➡️Поддержать канал: https://www.tg-me.com/boost/pyproglib
Please open Telegram to view this post
VIEW IN TELEGRAM
😺🐙🧼 Сам себе GitHub: как работать с чистым Git-репозиторием

Git — мощная система контроля версий, которую обычно используют через платформы вроде GitHub и GitLab. Однако Git сам по себе не требует веб-интерфейсов и облачных сервисов. Многие разработчики предпочитают работать с чистым Git-репозиторием, размещенным на собственном сервере.

➡️ В этой статье мы рассмотрим, почему это удобно, и как эффективно отправлять патчи в проекты, использующие этот подход.

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
😇 Ошибка дня: 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


2️⃣ Затем использовали:
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


3️⃣ Но потом — решили переименовать переменную в цикле, чтобы она называлась так же, как и fn снаружи:
def _wrapper():
fn()
for fn in fn._next: # ❗️ shadowing
fn()


4️⃣ Результат:
UnboundLocalError: cannot access local variable 'fn' where it is not associated with a value


Почему так

В Python, если переменная где-то присваивается в функции — она считается локальной на весь скоуп этой функции. Даже если вы пытаетесь её использовать до присваивания.

➡️ В примере выше: переменная fn переопределяется в цикле, а значит, Python считает, что она локальная для всей _wrapper(). Поэтому вызов fn() выше в коде — обращение к переменной, которой ещё нет, отсюда и UnboundLocalError.

На заметку:
➡️ Вложенные функции и декораторы — зона риска для shadowing
➡️ Если вы хотите использовать переменную из внешнего скоупа — не переопределяйте её имя внутри тела функции
➡️ Такие тонкости особенно актуальны при рефакторинге

Как исправить

Просто не переименовывайте переменную в fn повторно. Назовите её f, next_fn, step, callback — что угодно:
for step in fn._next:
step()


💬 Вопрос к вам: какие ошибки Python вам кажутся самыми «обидными», но по факту — обучающими?

Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/07 17:30:13
Back to Top
HTML Embed Code: