Forwarded from CTRL+S Health (ex. Сохранёнки программиста)
Не триггеримся: как унять головную боль
Когда питаться обезболом не хочется, а парить стопы не к месту. Когда-то точно понадобится, сохраняйте:
– Выйди на воздух, разомни шею и плечи. Часто этого хватает.
– Промни затылок пальцами — напряжение уходит вместе с болью.
– Если пульсирует — закрой шторы, посиди в тишине, без раздражителей.
– Холод к лбу, тепло к шее — старый, но рабочий трюк.
– Выпей воды, перекуси, сядь ровно. Базовые вещи спасают чаще, чем кажется.
– Убери экран, дай глазам отдохнуть.
– Если не отпускает — проверь давление или другие очевидные причины.
Когда питаться обезболом не хочется, а парить стопы не к месту. Когда-то точно понадобится, сохраняйте:
– Выйди на воздух, разомни шею и плечи. Часто этого хватает.
– Промни затылок пальцами — напряжение уходит вместе с болью.
– Если пульсирует — закрой шторы, посиди в тишине, без раздражителей.
– Холод к лбу, тепло к шее — старый, но рабочий трюк.
– Выпей воды, перекуси, сядь ровно. Базовые вещи спасают чаще, чем кажется.
– Убери экран, дай глазам отдохнуть.
– Если не отпускает — проверь давление или другие очевидные причины.
❤6✍1
Что вы чувствуете, когда осознаете, что текст написан GPT?
Anonymous Poll
49%
Отношусь нейтрально
35%
Терпеть не могу нагенеренное
8%
Не вижу разницы
8%
Другое
👏1🌚1
Зачем нужны «ленивые» (lazy) импорты
Когда модуль импортируется, интерпретатор выполняет весь код на глобальном уровне этого модуля, включая все его собственные импорты и инициализации. В больших приложениях и тестовых наборах это может заметно замедлять запуск и фазу сбора тестов. Поэтому идея «ленивого импорта» — откладывать импорт «тяжёлых» зависимостей до момента, когда они действительно понадобятся — помогает улучшить отзывчивость приложения и сократить время тестирования.
Переносим import внутрь функции
Самый очевидный и безопасный способ сделать импорт ленивым — переместить
Плюсы: простота. Минусы: если импорт нужен во многих местах, придётся либо дублировать
Вариант с importlib — когда нужно контролировать пространство имён
Если хочется более явного контроля (например, избежать появления имени в локальной области каждой функции), можно использовать
Пример:
Как найти «тяжёлые» импорты — инструмент `python -X importtime
Прежде чем делать импорты ленивыми, полезно понять, что именно тормозит загрузку. Для этого есть встроенная опция:
Особая зона внимания — pytest и фаза collection
Pytest во время collection импортирует все тестовые файлы — следовательно, импорты в глобальной области тестов будут исполнены на этапе collection, даже если сам тест не будет запущен. Это распространённый источник задержек в больших тестовых наборах. Решение — переносить импорты внутрь тестовых функций, использовать
«Глобальный» трюк
Если модуль содержит множество функций, которые все используют одну и ту же тяжёлую библиотеку, имеет смысл импортировать её при первом нужном вызове и сохранить в глобальной переменной модуля (через `global`).
Короткая иллюстрация:
Когда ленивые импорты — плохая идея
🔘 Если импорт жизненно важен для модуля и должен бросать ошибки во время старта (fail fast), откладывание импорта может скрыть проблему до момента выполнения, что усложнит отладку.
🔘 Когда импорт идёт с побочными эффектами, которые вы ожидаете увидеть при импортировании модуля — откладывая импорт, вы меняете поведение.
#основы
@zen_of_python
Когда модуль импортируется, интерпретатор выполняет весь код на глобальном уровне этого модуля, включая все его собственные импорты и инициализации. В больших приложениях и тестовых наборах это может заметно замедлять запуск и фазу сбора тестов. Поэтому идея «ленивого импорта» — откладывать импорт «тяжёлых» зависимостей до момента, когда они действительно понадобятся — помогает улучшить отзывчивость приложения и сократить время тестирования.
Переносим 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()
Когда ленивые импорты — плохая идея
#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
blind_watermark | Невидимые, но все же водяные знаки
Новый уровень вотермарков — «слепые» (blind). Обычный человек не увидит разницы между изображениями до и после, но специальный алгоритм сможет, даже при издевательствах над изображением вроде обрезки или поворота. Библиотека позволяет быстро навесить такую защиту на ваш контент и распознать ее.
Новый уровень вотермарков — «слепые» (blind). Обычный человек не увидит разницы между изображениями до и после, но специальный алгоритм сможет, даже при издевательствах над изображением вроде обрезки или поворота. Библиотека позволяет быстро навесить такую защиту на ваш контент и распознать ее.
❤3
mathwords.com | Глоссарий математики, статистики и прочих подобных наук
Если уж вам приходится освежать термины в рамках собесов, MathWords — словарь терминов и определений умеренного размера. Квантили и моды, абсциссы и экспонента, корень и остаток — база не только для старшеклассника, но и для Python-разработчика.
#инструмент
@zen_of_python
Если уж вам приходится освежать термины в рамках собесов, MathWords — словарь терминов и определений умеренного размера. Квантили и моды, абсциссы и экспонента, корень и остаток — база не только для старшеклассника, но и для Python-разработчика.
#инструмент
@zen_of_python
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Python митап от Авито 27 октября в Москве! ☄
Вечером 27 октября вас ждут в офисе на Лесной, чтобы обсудить:
➡ кейс оптимизации GC в Python от Саши Федосеева, backend-инженера из команды Main Page Tech Авито;
➡ как mypy укрощает Python в большой компании вместе с Сергеем Яхницким из Яндекса.
После докладов спикеры в формате круглого стола вместе с участниками обсудят, подходит ли Python для запуска больших нагруженных решений.
Для тех, кто не успевает вырваться из офиса или дома, будет онлайн-трансляция.
Так что не откладывайте, регистрируйтесь и зовите коллег — все подробности по ссылке.
Это #партнёрский пост
Вечером 27 октября вас ждут в офисе на Лесной, чтобы обсудить:
После докладов спикеры в формате круглого стола вместе с участниками обсудят, подходит ли Python для запуска больших нагруженных решений.
Для тех, кто не успевает вырваться из офиса или дома, будет онлайн-трансляция.
Так что не откладывайте, регистрируйтесь и зовите коллег — все подробности по ссылке.
Это #партнёрский пост
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.
#обсуждение
@zen_of_python
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.
#обсуждение
@zen_of_python
❤1
Шпаргалка Linux.pdf
311.3 KB
Шпаргалка Linux
Если вам предстоит демонстрировать навыки обращения с этой ОС на собесе или вы просто хотите узнать свои пробелы, обратите внимание на эту шпаргалку. Помимо классики вроде перемещения / переименования файлов, она содержит еще разделы про сеть (Networking), управление сервисами (systemd), контейнеризацию, которые часто не входят в базовые программы онлайн-университетов.
#обучение
@zen_of_python
Если вам предстоит демонстрировать навыки обращения с этой ОС на собесе или вы просто хотите узнать свои пробелы, обратите внимание на эту шпаргалку. Помимо классики вроде перемещения / переименования файлов, она содержит еще разделы про сеть (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
Еще одно расширение IDE, в которое можно внедрить любую GPT, платную или бесплатную. На видео демонстрируется фича Auto Approve, с помощью который вы задаете, какие фичи сразу принимаются, а какие потребуют вашей проверки.
Доступен в РФ: да
Цена: бесплатно
@prog_tools