🚀 Релизы и инструменты:
— 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 — открыт приём заявок
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
Хотите писать чистый и поддерживаемый код? Давайте разберем, чем отличаются эти три типа методов в Python.
🔹 Методы экземпляра (`self`):
✓ Работают с конкретным объектом
✓ Изменяют атрибуты экземпляра
✓ Доступ к атрибутам класса через
self.__class__
class MyClass:
def method(self):
return "Метод экземпляра", self
🔹 Методы класса (`cls`, `@classmethod`):
✓ Работают с классом в целом
✓ Могут изменять атрибуты класса
✓ Не изменяют атрибуты экземпляра
class MyClass:
@classmethod
def class_method(cls):
return "Метод класса", cls
🔹 Статические методы (`@staticmethod`):
✓ Не принимают self или 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)) # Статический метод
🔹 Вывод:
✓ Методы экземпляра изменяют данные конкретного объекта
✓ Методы класса работают с классом и создают альтернативные конструкторы
✓ Статические методы полезны для утилитарных функций
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2😁1👾1
Пора сыграть в любимую всеми игру: что делает этот код?
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 и т.д.
🔗 Оригинал статьи: https://clc.to/uL6PfA
Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍15⚡7🔥2😢1
📅 Важные релизы:
• 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.
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
🎭 Dev Memes: 1 апреля, а баги всё те же
Сегодня день официально разрешённого троллинга — и мы не могли пройти мимо. Собрали подборку мемов для Go-разработчика, которые вызывают лёгкое желание уволиться.
👉 Всё это — из нашего мемного канала «Библиотека IT-мемов»
Библиотека питониста
Сегодня день официально разрешённого троллинга — и мы не могли пройти мимо. Собрали подборку мемов для Go-разработчика, которые вызывают лёгкое желание уволиться.
👉 Всё это — из нашего мемного канала «Библиотека IT-мемов»
Библиотека питониста
😁13👍2🔥2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
🎩 1 апреля — лучший день, чтобы апгрейдить свой статус в офисе!
rust-stakeholder — CLI-инструмент, который генерирует абсолютно бессмысленный, но очень крутой вывод в терминале.
💡 Помни: важна не реальная работа, а то, насколько сложным выглядит терминал, когда рядом проходит VP of Engineering.
🔥 Фичи, которые не дают никакой пользы, но выглядят суперважными:
✓ Dev-симуляции — решай «задачи CERN», листая Reddit
✓ Техножаргон — «Неевклидова оптимизация данных» (никто не поймёт!)
✓ Прогресс-бары — работа кипит, пока ты пьёшь кофе
✓ Фейк-сеть — API-запросы в никуда
✓ Командная активность — невидимые коллеги шлют «pull requests»
✓ Смена ролей — от backend до blockchain за секунду
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9😁6❤4
🎉 PEP 751 (стандартный lockfile для Python) принят
⏳ После многих лет работы (и сотен сообщений в обсуждениях) Python-сообщество наконец-то приняло стандартный формат lockfile.
Разработчики всех ключевых инструментов для управления зависимостями участвовали в обсуждении, и теперь они либо полностью перейдут на новый формат (заменяя, например,
Что это значит для нас?
• Единый стандарт вместо множества
• Более простая и надежная развертка проектов
• Совместимость между инструментами для управления зависимостями
🔗 Подробности в PEP 751
🔗 Обсуждение на Python Discuss
Библиотека питониста #свежак
Разработчики всех ключевых инструментов для управления зависимостями участвовали в обсуждении, и теперь они либо полностью перейдут на новый формат (заменяя, например,
poetry.lock
или uv.lock
), либо добавят поддержку экспорта в этот формат.Что это значит для нас?
• Единый стандарт вместо множества
requirements.txt
• Более простая и надежная развертка проектов
• Совместимость между инструментами для управления зависимостями
🔗 Подробности в PEP 751
🔗 Обсуждение на Python Discuss
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉18👍6🔥3👏1
Forwarded from Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
🪄 Визуальные вычисления в Power BI: прокачиваем условное форматирование
Теперь настраивать условное форматирование в Power BI можно без сложных DAX-формул! Разбираем, как новые визуальные вычисления помогают создавать динамичные, адаптивные и стильные отчеты, которые мгновенно реагируют на изменения данных.
⭐️ Пора сделать отчеты действительно интерактивными!
🔗 Ссылка на статью: https://proglib.io/sh/lsb0fEuYSv
Библиотека дата-сайентиста
Теперь настраивать условное форматирование в Power BI можно без сложных DAX-формул! Разбираем, как новые визуальные вычисления помогают создавать динамичные, адаптивные и стильные отчеты, которые мгновенно реагируют на изменения данных.
⭐️ Пора сделать отчеты действительно интерактивными!
Библиотека дата-сайентиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
Учить сложные темы бывает непросто, но что, если можно разбить их на простые и понятные части? Делимся мощным промптом для 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👾1
В новой версии представлено множество улучшений и новых возможностей.
• Все модели автоматически импортируются в 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