Учить сложные темы бывает непросто, но что, если можно разбить их на простые и понятные части? Делимся мощным промптом для 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
❤12👍5🔥2😢1
Пилим крутую подборку ноутов для кодеров в 2025-м и хотим собрать реальный фидбек от тех, кто в теме!
Какой ноут спасает вас в кодинге и почему?
Расскажите все:
Топовые советы попадут в нашу статью. Сделаем годный гайд, который реально поможет коллегам!
Делитесь в комментах.
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2😁2🥱2
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
👍17❤4❤🔥2
В новой версии представлено множество улучшений и новых возможностей.
• Все модели автоматически импортируются в shell по умолчанию
• Поддержка составных первичных ключей
• Переопределение BoundField стало значительно проще: теперь это можно делать на уровне формы, поля или проекта
🔗 Анонс релиза: https://clc.to/lV9Qig
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3❤🔥1🔥1🎉1
Вот история, которая заставляет задуматься. Девушка подала резюме, и ей позвонили в 9 утра, но она ещё спала. Её кандидатуру сразу отклонили со словами: «Мы не хотим сотрудничать с человеком, который спит до 9 утра». Неужели, чтобы считаться профессионалом, нужно работать строго с 9:00 до 18:00?
Как бы вы отреагировали на такую ситуацию? Как вы организуете свою работу над кодом?
Го в комменты, устроим холивар!
❤️ — команда «Офисный график»: «Кодить надо с 9 до 18, как в нормальной компании! Дисциплина — залог успеха. Если ты не можешь работать по расписанию, то как ты дедлайны будешь соблюдать? И вообще, в офисе вся команда на месте, сразу можно обсудить баг или фичу!»
👍 — команда «Когда пишется»: «Код — это творчество! Я могу в 3 часа ночи написать шедевр, который за день в офисе не родится. Главное — результат, а не то, сижу ли я за компом с 9 утра.»
P.S. Инструкция о том, как оставить комментарий
Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76❤5❤🔥3
🐛 Фишка инструмента: учимся дебаггингу осознанно с 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
👍7❤2❤🔥1😁1
Мы собрали лучшие библиотеки для создания графических интерфейсов на Python в 2025 — от классики до свежих решений.
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5❤🔥3
🕵️ Играем в ревью: сможете найти все 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
👍6❤4❤🔥1🥱1
📚Напоминаем про наш полный курс «Самоучитель по 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
❤17👍5🤔1
🐍 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
Библиотека питониста #свежак
👍5❤2🔥1
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
❤7👍4
Forwarded from Библиотека задач по Python | тесты, код, задания
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰167⚡19👍9👾9
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
🔥8👍6❤3⚡1😁1
В 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
👍28❤🔥4🤔3❤2🔥2
🧱⛏️ Чекни свой крафт: 8 признаков, что разработчик слишком залип в Minecraft
Думаешь, что твоя продуктивность падает из-за багов в коде? А может, все дело в том, что ты мысленно фармишь крипперов, пока твой PM объясняет задачу?
😎 Пройди наш тест и узнай, насколько глубоко ты провалился в пиксельную кроличью нору!
👉 Пройти тест
Библиотека питониста
Думаешь, что твоя продуктивность падает из-за багов в коде? А может, все дело в том, что ты мысленно фармишь крипперов, пока твой PM объясняет задачу?
😎 Пройди наш тест и узнай, насколько глубоко ты провалился в пиксельную кроличью нору!
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3😁2
Питонисты!
Проголосуйте за наш канал, и в сторис мы опубликуем топ материалов, которые должен прочитать каждый питонист.
➡️ Поддержать канал: https://www.tg-me.com/boost/pyproglib
Проголосуйте за наш канал, и в сторис мы опубликуем топ материалов, которые должен прочитать каждый питонист.
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤5👍2
Forwarded from Библиотека программиста | программирование, кодинг, разработка
😺🐙🧼 Сам себе GitHub: как работать с чистым Git-репозиторием
Git — мощная система контроля версий, которую обычно используют через платформы вроде GitHub и GitLab. Однако Git сам по себе не требует веб-интерфейсов и облачных сервисов. Многие разработчики предпочитают работать с чистым Git-репозиторием, размещенным на собственном сервере.
➡️ В этой статье мы рассмотрим, почему это удобно, и как эффективно отправлять патчи в проекты, использующие этот подход.
🐸 Библиотека программиста
Git — мощная система контроля версий, которую обычно используют через платформы вроде GitHub и GitLab. Однако Git сам по себе не требует веб-интерфейсов и облачных сервисов. Многие разработчики предпочитают работать с чистым Git-репозиторием, размещенным на собственном сервере.
➡️ В этой статье мы рассмотрим, почему это удобно, и как эффективно отправлять патчи в проекты, использующие этот подход.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2👍2😁2
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
❤7👍7❤🔥1🤩1