Zen of Python
20.1K subscribers
1.3K photos
180 videos
37 files
3.32K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Зачем нужны «ленивые» (lazy) импорты

Когда модуль импортируется, интерпретатор выполняет весь код на глобальном уровне этого модуля, включая все его собственные импорты и инициализации. В больших приложениях и тестовых наборах это может заметно замедлять запуск и фазу сбора тестов. Поэтому идея «ленивого импорта» — откладывать импорт «тяжёлых» зависимостей до момента, когда они действительно понадобятся — помогает улучшить отзывчивость приложения и сократить время тестирования.


Переносим import внутрь функции

Самый очевидный и безопасный способ сделать импорт ленивым — переместить import из глобальной области видимости внутрь функции или метода, где ресурс реально используется. При таком подходе импорт произойдёт только при первом вызове этой функции (и далее кешируется в sys.modules, поэтому реальной «повторной» загрузки не происходит). Это даёт быстрый выигрыш для модулей, которые редко используются или инициализируют тяжёлые зависимости:


def do_heavy_task():
import heavy_lib
heavy_lib.run()


Плюсы: простота. Минусы: если импорт нужен во многих местах, придётся либо дублировать import (что допустимо), либо устанавливать глобальную переменную после первого импорта.


Вариант с importlib — когда нужно контролировать пространство имён

Если хочется более явного контроля (например, избежать появления имени в локальной области каждой функции), можно использовать importlib.import_module() и присваивать результат в переменную (глобальную или локальную). Это зачастую полезно при динамическом импорте по имени строки:

Пример:


from importlib import import_module

def use_feature():
mod = import_module("heavy_lib")
mod.do()



Как найти «тяжёлые» импорты — инструмент `python -X importtime

Прежде чем делать импорты ленивыми, полезно понять, что именно тормозит загрузку. Для этого есть встроенная опция: python -X importtime your_program.py — она выводит дерево импорта с временами, позволяя увидеть самые затратные узлы. Это особенно полезно при оптимизации большого проекта или ускорении фазы сбора тестов.


Особая зона внимания — pytest и фаза collection

Pytest во время collection импортирует все тестовые файлы — следовательно, импорты в глобальной области тестов будут исполнены на этапе collection, даже если сам тест не будет запущен. Это распространённый источник задержек в больших тестовых наборах. Решение — переносить импорты внутрь тестовых функций, использовать importlib внутри тестов.


«Глобальный» трюк

Если модуль содержит множество функций, которые все используют одну и ту же тяжёлую библиотеку, имеет смысл импортировать её при первом нужном вызове и сохранить в глобальной переменной модуля (через `global`).
Короткая иллюстрация:


# module.py
heavy = None

def first_use():
global heavy
if heavy is None:
import heavy_lib
heavy = heavy_lib
heavy.do()



Когда ленивые импорты — плохая идея

🔘 Если импорт жизненно важен для модуля и должен бросать ошибки во время старта (fail fast), откладывание импорта может скрыть проблему до момента выполнения, что усложнит отладку.
🔘 Когда импорт идёт с побочными эффектами, которые вы ожидаете увидеть при импортировании модуля — откладывая импорт, вы меняете поведение.

#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1
​​blind_watermark | Невидимые, но все же водяные знаки

Новый уровень вотермарков — «слепые» (blind). Обычный человек не увидит разницы между изображениями до и после, но специальный алгоритм сможет, даже при издевательствах над изображением вроде обрезки или поворота. Библиотека позволяет быстро навесить такую защиту на ваш контент и распознать ее.
3
​​mathwords.com | Глоссарий математики, статистики и прочих подобных наук

Если уж вам приходится освежать термины в рамках собесов, MathWords — словарь терминов и определений умеренного размера. Квантили и моды, абсциссы и экспонента, корень и остаток — база не только для старшеклассника, но и для Python-разработчика.

#инструмент
@zen_of_python
👍5
Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.

#обсуждение
@zen_of_python
1
👎14🤷‍♂1🤔1
Придумайте смешную подпись к фото так, чтобы это относилось к ЯП
#обсуждение
@zen_of_python
Шпаргалка Linux.pdf
311.3 KB
Шпаргалка Linux

Если вам предстоит демонстрировать навыки обращения с этой ОС на собесе или вы просто хотите узнать свои пробелы, обратите внимание на эту шпаргалку. Помимо классики вроде перемещения / переименования файлов, она содержит еще разделы про сеть (Networking), управление сервисами (systemd), контейнеризацию, которые часто не входят в базовые программы онлайн-университетов.

#обучение
@zen_of_python
This media is not supported in your browser
VIEW IN TELEGRAM
Roo-Code | Опенсорсный ИИ-копайлот в VS Code

Еще одно расширение IDE, в которое можно внедрить любую GPT, платную или бесплатную. На видео демонстрируется фича Auto Approve, с помощью который вы задаете, какие фичи сразу принимаются, а какие потребуют вашей проверки.

Доступен в РФ: да
Цена: бесплатно
@prog_tools
Forwarded from Типичный программист
Дайте два 😮‍💨

Напомним, как всё было: летом вы голосовали за концепт и дизайн упаковки нашего фирменного напитка — между ТИПИЧНЫМ и ТОКСИЧНЫМ. Предсказуемо победил ТОКСИЧНЫЙ ПРОГРАММИСТ.

Лимитка получилась настолько удачной, что понадобился ещё один релиз. Paradox уже выкатили коллаб в продажу, а мы запускаем новый розыгрыш — 3 победителя получат коробку «ТОКСИЧНЫЙ ПРОГРАММИСТ» с шестью банками.

Подробнее с правилами можно ознакомиться здесь.

Чтобы участвовать, нужно:
— быть подписанным на @tproger и @paradox_beer;
— оставить реакцию под этим постом;
— нажать кнопку «Участвую».

Итоги подведём 27 октября. Победителей выберем с помощью бота.

А если ты не хочешь ждать, то можешь уже купить свой ТОКСИЧНЫЙ IPA. Всем удачи!

Участников: 709
Призовых мест: 3
Дата розыгрыша: 18:00, 27.10.2025 MSK (1 час)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
super(): как это работает

Сегодня мы разберём одно из ключевых понятий объектно-ориентированного программирования в Python — super(). Когда мы работаем с наследованием, то порой сталкиваемся с дублированием кода:


class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary

def raise_salary(self, amount):
self.salary += amount


class Manager(Employee):
def __init__(self, name, salary, department):
self.name = name
self.salary = salary
self.department = department


На первый взгляд, всё верно. Но посмотрите внимательно — часть кода в Manager.__init__ дублирует логику базового класса Employee. В больших проектах уследить за всеми такими повторениями становится трудоемко. Решение простое — использовать super():


class Manager(Employee):
def __init__(self, name, salary, department):
super().__init__(name, salary)
self.department = department


Теперь Manager вызывает конструктор базового класса Employee, а значит:

🔘 Код становится короче;
🔘 Меньше ошибок при рефакторинге.


Как это работает под капотом

Многие думают, что super() — это функция. На самом деле это класс. При его вызове возвращается прокси-объект, который даёт доступ к методам родительского класса. То есть строка:


super().__init__(name, salary)


означает:

«Возьми ближайший родительский класс в иерархии и вызови его метод `__init__()`».


Что важно помнить

🔘 super() работает не только в __init__. Его можно использовать в любых методах, которые переопределяются в подклассе;
🔘 Можно вызывать super() без аргументов — контекст определяется автоматически;
🔘 В сложных системах с множественным наследованием super() работает через механизм Method Resolution Order (MRO). Это гарантирует, что каждый базовый класс вызывается ровно один раз.

#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121
​​Импортозамещение Trello, Jira и Confluence — подборка для разработчиков

На Tproger представили подборку российских альтернатив Trello, Jira и Confluence с акцентом на коллективное хранения документов. В статье вы найдете инструменты, которые позволяют управлять процессами, задачами и документацией в одном пространстве, без разделения между трекером и хранилищем знаний. Инструменты соответствуют ФЗ-152 (о персональных данных) — все решения размещаются на отечественных серверах или поддерживают on-premise. Среди разбираемых продуктов есть как простые таск-системы, так и комплексные платформы с удобным редактором, версионированием и автоматической миграцией контента из зарубежных сервисов.

@prog_tools
1🤣1💊1
Для тех, кто чувствует, что может больше в IT

Когда начинаешь щёлкать старые рабочие задачи как орешки, приходит время прокачиваться до мидла или сеньора.

Усилить экспертизу поможет новое направление курсов Яндекс Практикум PRO. Оно создано специально для практикующих специалистов в IT-профессиях: программировании, анализе данных, работе с нейронками, продакт- и проджект- менеджменте.

Здесь обучают на реальных кейсах и помогают углубить знания в выбранной сфере. И эти навыки точно понадобятся каждому, кто задумывается о переходе с позиции джуна.

Вся информация о курсах собрана здесь.

Это #партнёрский пост
​​Python Software Foundation отвергла грант США на $1,5 млн из-за запрета на инициативы по инклюзивности

PSF неожиданно отказалась от гранта на 1,5 млн долларов, предложенного Национальным научным фондом США (NSF), из-за условий, запрещающих организациям-получателям продвигать программы, направленные на разнообразие, равенство и инклюзивность. Несмотря на финансовую поддержку в рамках проекта по безопасности opensource-экосистем, PSF сочла, что такие ограничения противоречат её ценностям и миссии. Совет директоров единодушно отверг предложение, указав, что запрет на инициативы DEI (diversity, equity, inclusion) может повредить всей её деятельности. Решение принято в условиях сохраняющейся потребности фонда в ресурсах и растущего внимания к безопасности экосистемы Python.

#факт
@zen_of_python
🌚106😁4👎1
air | Веб-фреймворк на базе FastAPI, Starlette и Pydantic

Новый минималистичный веб-тул от авторов книги 'Two Scoops of Django'. Крутая особенность — Air Tags, теги-компоненты по аналогии с React. С Air проще писатьвеб-приложения с подкапотным API. Хорошая попытка исправить то, что не нравится в Django.

#инструмент
@zen_of_python
🤔2
Media is too big
VIEW IN TELEGRAM
Не пропусти МТС True Tech Champ — масштабный фестиваль 21 ноября для тех, кто живет технологиями

Тебя ждут:

Захватывающая сюжетная линия: уникальная кибервселенная с возможностью влиять на ход происходящего;

Конференция с международными спикерами: эксперты расскажут о трендах в ИИ и инновациях в индустрии;

ИТ-качалка — наращивай экспертизу на воркшопах;

Шоу-финал ИТ-чемпионата, где более 250 талантов со всей России сразятся в лайв-кодинге и программировании роботов на скоростное прохождение лабиринтов со спецэффектами. Поболей за своих фаворитов;

Активности: бои роботов, кодерские челленджи, пайка плат и не только. Заработай True Coins и обменяй их на стильный мерч;

HR-Hub, где команда МТС расскажет о возможностях для развития в компании и поможет перезагрузить карьерный трек;

Афтепати со звездными хэдлайнерами — зажги под популярные хиты!

Когда: 21 ноября, МТС Live Холл в Москве и онлайн.

Регистрируйся на сайте.
Бесплатное участие, количество мест ограничено.

Это #партнёрский пост
​​Юн Цуй «Рецепты Python. Коллекция лучших техник программирования»

Если вам уже попадалась постепенно усложняющаяся книга по языку, которую труднее читать к концу, то в этот раз будет по-другому. В книге Юн Цуй собрал 63 самых полезных, по его мнению, навыков Python-разработчика, К примеру, в одной из глав задача ««Как найти элементы в последовательности?» получает сначала базовое решение, а потом дополняется еще двумя.

#обучение
@zen_of_python
🔥2
​​Python for Everyone | Короткие видеотуториалы

Англоязычный YouTube-канал, прекрасно «грокающий» различные концепции языка, будь то декораторы, миксины или полиморфизм. Каждый ролик — кустарный мультфильм с демонстрацией предельно понятного кода.

#обучение
@zen_of_python
Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.

#обсуждение
@zen_of_python