Что выведет код Middle Модули, пакеты и окружения обновлено

Повторный импорт и sys.modules

Вопрос

Что выведет код? По строке на каждый print.

import sys, types

fake = types.ModuleType('settings')
fake.DEBUG = True
sys.modules['settings'] = fake

import settings
print(settings.DEBUG)
import settings as s2
print(s2 is fake, __name__)

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: True, True __main__. import сначала смотрит в sys.modules, поэтому подложенный объект возвращается без поиска файла.

Что выведет

True
True __main__

Разбор

import сначала смотрит в sys.modules, поэтому подложенный объект возвращается без поиска файла. Повторный импорт отдаёт тот же объект. Запущенный скрипт имеет __name__ == "__main__".

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме