Вайсфельд М. Объектно-ориентированный подход. 5-е издание
Классическая книга для целого семейства языков вроде Python. Читать будет непросто, ведь там может встретиться глава про SOLID с примерами на C++, однако это наилучший способ понять философию создателей таких языков. Начинающим такое советовать, наверное, не стоит, но если вы уже погружались в горнило разработки и выпуска ПО в прод, то книга точно сделает из вас лучшего специалиста.
#книга
@zen_of_python
Классическая книга для целого семейства языков вроде Python. Читать будет непросто, ведь там может встретиться глава про SOLID с примерами на C++, однако это наилучший способ понять философию создателей таких языков. Начинающим такое советовать, наверное, не стоит, но если вы уже погружались в горнило разработки и выпуска ПО в прод, то книга точно сделает из вас лучшего специалиста.
#книга
@zen_of_python
✍1👎1
  Forwarded from CTRL+S Health (ex. Сохранёнки программиста)
Не триггеримся: как унять головную боль
Когда питаться обезболом не хочется, а парить стопы не к месту. Когда-то точно понадобится, сохраняйте:
– Выйди на воздух, разомни шею и плечи. Часто этого хватает.
– Промни затылок пальцами — напряжение уходит вместе с болью.
– Если пульсирует — закрой шторы, посиди в тишине, без раздражителей.
– Холод к лбу, тепло к шее — старый, но рабочий трюк.
– Выпей воды, перекуси, сядь ровно. Базовые вещи спасают чаще, чем кажется.
– Убери экран, дай глазам отдохнуть.
– Если не отпускает — проверь давление или другие очевидные причины.
  
  
  
  
  
Когда питаться обезболом не хочется, а парить стопы не к месту. Когда-то точно понадобится, сохраняйте:
– Выйди на воздух, разомни шею и плечи. Часто этого хватает.
– Промни затылок пальцами — напряжение уходит вместе с болью.
– Если пульсирует — закрой шторы, посиди в тишине, без раздражителей.
– Холод к лбу, тепло к шее — старый, но рабочий трюк.
– Выпей воды, перекуси, сядь ровно. Базовые вещи спасают чаще, чем кажется.
– Убери экран, дай глазам отдохнуть.
– Если не отпускает — проверь давление или другие очевидные причины.
❤6✍1
  Что вы чувствуете, когда осознаете, что текст написан GPT?
  Anonymous Poll
    49%
    Отношусь нейтрально
      
    34%
    Терпеть не могу нагенеренное
      
    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
  