Недавно в Python появились lazy imports — модуль не импортируется сразу, а загружается только тогда, когда он реально нужен.
То есть:
lazy import json
не загружает
json сразу в память.Вместо модуля вы получаете специальный объект-заглушку:
globals()["json"]
# <lazy_import 'json'>
👇 И тут есть неожиданный трюк. Оказывается, lazy import можно зарезолвить вручную:
lazy import json
resolved_json = globals()["json"].resolve()
После этого:
resolved_json.dumps({"x": 1})
будет работать как обычный модуль
json.Что интересно — lazy import сам не исчезает:
globals()["json"]
# <lazy_import 'json'>
То есть Python, вероятно, делает примерно следующее под капотом:
globals()["json"] = globals()["json"].resolve()
когда понимает, что модуль уже реально понадобился.
Самый интересный вопрос здесь: что именно триггерит пробуждение lazy import?
Скорее всего, это происходит через
__getattribute__ / __getattr__, но сам механизм внутри выглядит довольно элегантно.📍 Навигация: Вакансии • Задачи • Собесы
Библиотека питониста
#буст