Учить сложные темы бывает непросто, но что, если можно разбить их на простые и понятные части? Делимся мощным промптом для 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
Генераторы — мощный инструмент для итераций, особенно при работе с большими данными. В отличие от обычных функций, они вычисляют значения лениво, выдавая их по запросу и экономя память. Это делает код более эффективным и удобным для повторного использования.
➡️ Принцип работы
Вместо возврата всех значений сразу, генератор использует
При вызове
➡️ Пример: Фибоначчи на генераторах
Такой генератор можно использовать для обработки больших последовательностей без лишних затрат памяти.
➡️ Генераторы vs. списки
Генераторы экономят память, так как не хранят все элементы в памяти:
Разница очевидна: генератор занимает всего 208 байт, тогда как список — 8+ мегабайт!
➡️ Генераторные выражения
Аналогично списковым включениям, но работают лениво:
➡️ Комбинирование генераторов
С помощью itertools генераторы можно объединять и фильтровать:
➡️ Когда использовать генераторы
— Обработка больших данных без перегрузки памяти
— Потоковая обработка (например, чтение файлов)
— Создание бесконечных последовательностей
— Оптимизация скорости и эффективности кода
Библиотека питониста #буст
Генераторы — мощный инструмент для итераций, особенно при работе с большими данными. В отличие от обычных функций, они вычисляют значения лениво, выдавая их по запросу и экономя память. Это делает код более эффективным и удобным для повторного использования.
Вместо возврата всех значений сразу, генератор использует
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 байт
Разница очевидна: генератор занимает всего 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
В новой версии представлено множество улучшений и новых возможностей.
• Все модели автоматически импортируются в 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⃣ Устанавливаем
2⃣ Запускаем тестовый Python-скрипт
3⃣ Внедряем в этот код ошибку
Вы увидите сообщение:
4⃣ Теперь запускаем скрипт снова и видим ошибку:
Задача — найти и исправить ошибку.
5⃣ Если застряли, можно посмотреть внесённые изменения через
✅ Гибкие настройки `py-bugger`
Вы можете настроить тип ошибок, количество багов и целевой файл/директорию:
Здесь:
🔘
🔘
🔘
Библиотека питониста #буст
Обычно отладка — это реактивный процесс: мы исправляем баги, когда они появляются. Но что, если учиться дебаггингу так же, как любой другой навык — от простого к сложному?
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
— внесёт баги в конкретный файлБиблиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Мы собрали лучшие библиотеки для создания графических интерфейсов на Python в 2025 — от классики до свежих решений.
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
🕵️ Играем в ревью: сможете найти все 5 багов?
Быстрая проверка скиллов. В этом кусочке кода спрятаны 5 ошибок.
Цель программы: для каждого числа в списке определить, является ли оно простым (prime), и вернуть список булевых значений.
Вывод сейчас:
🎯 Ваша задача — найти все 5 ошибок. Пишите свои ответы в комментариях — обсудим вместе!
👀 Ответ выложу позже.
P.S. Инструкция о том, как оставить комментарий
Библиотека питониста #развлекалово
Быстрая проверка скиллов. В этом кусочке кода спрятаны 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
Мы написали и собрали для вас в одну подборку все 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
Библиотека питониста #свежак
🚀 Релизы и инструменты:
— 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
Библиотека питониста #свежак
Forwarded from Библиотека собеса по Python | вопросы с собеседований
✍🏻 Что такое wheel и eggs в Python? Какая между ними разница?
✍🏻 Python wheel — это стандартный формат установки дистрибутивов Python, который содержит все файлы и метаданные, необходимые для установки. Файл WHL также содержит информацию о версиях и платформах Python, поддерживаемых этим файлом. Расширение файла wheel — .whl
✍🏻 Python egg — это сжатый архив ZIP, содержащий исходные файлы приложения Python вместе с метаинформацией о дистрибутиве. Расширение файла egg — .egg
Основная разница заключается в том, что wheel предоставляет более простой и надежный способ установки пакетов. В отличие от eggs, он не требует установки дополнительных зависимостей и обеспечивает более быстрое время установки. Кроме того, wheel поддерживает все платформы, на которых может работать Python.
Библиотека собеса по Python
✍🏻 Python egg — это сжатый архив ZIP, содержащий исходные файлы приложения Python вместе с метаинформацией о дистрибутиве. Расширение файла egg — .egg
Основная разница заключается в том, что wheel предоставляет более простой и надежный способ установки пакетов. В отличие от eggs, он не требует установки дополнительных зависимостей и обеспечивает более быстрое время установки. Кроме того, wheel поддерживает все платформы, на которых может работать Python.
Библиотека собеса по Python
Forwarded from Библиотека задач по Python | тесты, код, задания
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Режим агента (Agent mode) официально открыт для всех пользователей Visual Studio Code!
Это как напарник-программист, который сам решает задачи: копается в коде, правит файлы, запускает команды и чинит ошибки, пока всё не заработает.
Включить режим агента можно в Chat View, выбрав
Agent
в настройках chat.mode
и активировав chat.agent.enabled
. Если параметр не отображается — обновите VS Code до последней версии и перезапустите.🔗 Детали обновления: https://clc.to/1lqy9g
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
В Python
break
в циклах for
прерывает итерацию, но часто есть более читаемые и лаконичные способы. Разберём типичные случаи и их альтернативы.Классика с
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
?Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🧱⛏️ Чекни свой крафт: 8 признаков, что разработчик слишком залип в Minecraft
Думаешь, что твоя продуктивность падает из-за багов в коде? А может, все дело в том, что ты мысленно фармишь крипперов, пока твой PM объясняет задачу?
😎 Пройди наш тест и узнай, насколько глубоко ты провалился в пиксельную кроличью нору!
👉 Пройти тест
Библиотека питониста
Думаешь, что твоя продуктивность падает из-за багов в коде? А может, все дело в том, что ты мысленно фармишь крипперов, пока твой 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-репозиторием, размещенным на собственном сервере.
➡️ В этой статье мы рассмотрим, почему это удобно, и как эффективно отправлять патчи в проекты, использующие этот подход.
🐸 Библиотека программиста
Git — мощная система контроля версий, которую обычно используют через платформы вроде GitHub и GitLab. Однако Git сам по себе не требует веб-интерфейсов и облачных сервисов. Многие разработчики предпочитают работать с чистым Git-репозиторием, размещенным на собственном сервере.
➡️ В этой статье мы рассмотрим, почему это удобно, и как эффективно отправлять патчи в проекты, использующие этот подход.
Please open Telegram to view this post
VIEW IN TELEGRAM
UnboundLocalError
Сегодня разбираем одну из тех ошибок в Python, которая выглядит загадочно, но легко объяснима, если знать одну тонкость.
💥 Что произошло
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
❓ Почему так
В Python, если переменная где-то присваивается в функции — она считается локальной на весь скоуп этой функции. Даже если вы пытаетесь её использовать до присваивания.
fn
переопределяется в цикле, а значит, Python считает, что она локальная для всей _wrapper()
. Поэтому вызов fn()
выше в коде — обращение к переменной, которой ещё нет, отсюда и UnboundLocalError
.На заметку:
Просто не переименовывайте переменную в
fn
повторно. Назовите её f
, next_fn
, step
, callback
— что угодно:for step in fn._next:
step()
💬 Вопрос к вам: какие ошибки Python вам кажутся самыми «обидными», но по факту — обучающими?
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM