Что выведет код 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 ошибок.