Получить доступ

Зачем нужна конструкция if __name__ == "__main__"?

JuniorОкружение и инструменты
Ещё спрашивают так:
  • Что такое __name__ в Python?
  • Почему код выполняется при импорте модуля?
Коротко

Код под if __name__ == "__main__": выполняется, только когда файл запущен как скрипт, а не импортирован.

  • При запуске python app.py у модуля __name__ == "__main__", при импорте — его имя
  • Позволяет одному файлу быть и модулем, и программой

А ещё Для multiprocessing на Windows и macOS это обязательно, иначе процессы запускаются рекурсивно

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

При импорте Python выполняет весь код модуля сверху вниз: определения функций, классов и всё, что написано на верхнем уровне. Если там стоит запуск программы, он произойдёт при каждом import.

У каждого модуля есть переменная __name__. Python задаёт её так:

  • если файл запущен напрямую (python app.py или python -m app) — "__main__";
  • если файл импортирован — имя модуля, например "app".

Поэтому код запуска прячут под проверку. Тогда файл можно импортировать, например в тестах, и пользоваться его функциями, не запуская программу.

Обычный шаблон — функция main() и вызов под проверкой. Это же нужно для multiprocessing: на Windows и macOS дочерний процесс заново импортирует главный модуль, и без проверки он снова запустил бы пул процессов.

Для пакетов точкой входа служит файл __main__.py: он выполняется при python -m package.

Пример

# app.py
def main():
    print("программа запущена")

def helper(x):
    return x * 2

if __name__ == "__main__":
    main()

# test_app.py
from app import helper     # main() не вызывается
assert helper(2) == 4

Что хотят услышать

  • Что Python выполняет модуль при импорте.
  • Какое значение принимает __name__ в обоих случаях.
  • Практический смысл: импорт в тесты и другие модули.
  • Связь с multiprocessing — плюс.

Частые ошибки

  • Считать, что это «точка входа, как main в C», без объяснения механизма.

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем