🐍 Python  ·  20 вопросов  ·  ~50 мин  ·  ⏱ Таймер 50:00  ·  Средний  · 

Модули, пакеты и импорты

Проверяет пространство имён, структуру пакета, относительные импорты и точку входа. Внутри — не пересказ терминов, а работа с четырьмя сторонами темы: «Импорт», «Структура пакета», «Относительные пути» и «Запуск модуля». Все задания рассчитаны на CPython 3.12; отличия других реализаций или версий учитываются только там, где это прямо оговорено.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Версия: CPython 3.12. Выберите один ответ из четырёх. На 20 вопросов отведено не меньше 40 минут; код лучше читать построчно. После завершения вы увидите общий процент, четыре тематические шкалы и объяснение каждого ответа.
Вопрос 1 из 20
После единственной строки `import math` какие результаты дадут проверки имён `math` и `sqrt` в `globals()`?
Python
import math
print("math" in globals(), "sqrt" in globals())
Вопрос 2 из 20
Сколько раз выполнится код модуля при двух импортах в одном процессе?
Python
import sys
import tempfile
from pathlib import Path

with tempfile.TemporaryDirectory() as tmp:
    Path(tmp, "module_a.py").write_text('print("loaded")\n', encoding="utf-8")
    sys.path.insert(0, tmp)
    try:
        sys.modules.pop("module_a", None)
        import module_a
        import module_a
    finally:
        sys.modules.pop("module_a", None)
        sys.path.remove(tmp)
Вопрос 3 из 20
Пакетный модуль выполняет `from .utils import parse`. Откуда будет взято имя `parse`?
Вопрос 4 из 20
Что выведет защитный блок при импорте?
Python
import sys
import tempfile
from pathlib import Path

source = 'print("top")\nif __name__ == "__main__":\n    print("run")\n'
with tempfile.TemporaryDirectory() as tmp:
    Path(tmp, "tool.py").write_text(source, encoding="utf-8")
    sys.path.insert(0, tmp)
    try:
        sys.modules.pop("tool", None)
        import tool
    finally:
        sys.modules.pop("tool", None)
        sys.path.remove(tmp)
Вопрос 5 из 20
Почему `from module import *` затрудняет поддержку?
Вопрос 6 из 20
Что произойдёт при `from config import VALUE` и последующем изменении `config.VALUE`?
Python
import sys
import types

module = types.ModuleType("config")
module.VALUE = 10
sys.modules["config"] = module
try:
    import config
    from config import VALUE
    config.VALUE = 20
    print(VALUE, config.VALUE)
finally:
    sys.modules.pop("config", None)
Вопрос 7 из 20
Для чего обычно служит `__init__.py`?
Вопрос 8 из 20
Файл с относительным импортом запускают напрямую. Какая ошибка контекста пакета может возникнуть и почему запуск через `-m` её устраняет?
Вопрос 9 из 20
Модуль запускается указанным способом. Какое значение `__name__` напечатает фрагмент?
Python
# python -m package.tool
print(__name__)
Вопрос 10 из 20
Импорт выполнен с псевдонимом. Какое значение напечатает вызов через этот псевдоним?
Python
import math as m
print(m.sqrt(16))
Вопрос 11 из 20
В архитектуре `models` и `services` возник циклический импорт. Какое проектное исправление разорвёт цикл зависимостей?
Вопрос 12 из 20
Что находится в `sys.path[0]` при обычном запуске файла?
Вопрос 13 из 20
Рядом со скриптом появился файл `json.py`. Какую ошибку затенения вызовет обычный `import json` в этом граничном сценарии?
Вопрос 14 из 20
Что выведет округление импортированной константы `pi`?
Python
from math import pi
print(round(pi, 2))
Вопрос 15 из 20
Когда импорт внутри функции оправдан?
Вопрос 16 из 20
Как работает `__all__`?
Вопрос 17 из 20
Что лучше размещать под `if __name__ == "__main__"`?
Вопрос 18 из 20
Что произойдёт при выполнении `from math import definitely_missing`, если модуль `math` найден, но такого имени в нём нет?
Вопрос 19 из 20
В большом проекте нужно сделать источник зависимости явным. Какое проектное решение даёт абсолютный импорт?
Вопрос 20 из 20
Что вернёт `importlib.reload(module)`?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу