Основная среда сценариев верхнего уровня

Что это такое

__main__ — это имя области, в которой выполняется код верхнего уровня. Имя модуля устанавливается равным __main__, когда он считывается из стандартного ввода, сценария или интерактивной подсказки.

Модуль может определить, выполняется ли он в основной области, проверив свое собственное __name__, что позволяет использовать распространенный идиом для условного выполнения кода в модуле. Когда он запускается как сценарий или с помощью python -m, но не когда он импортируется:

# __name__ == "__main__": проверка, запущен ли сценарий напрямую (не импортирован)
if __name__ == "__main__":  # True, если запущен как сценарий, False, если импортирован
    # выполняется только при запуске в качестве сценария
    main()

Для пакета тот же эффект может быть достигнут путем включения модуля main.py, содержимое которого будет выполнено, когда модуль запускается с помощью -m.

Например, если мы разрабатываем сценарий, предназначенный для использования в качестве модуля, мы должны сделать следующее:

# Пример: функцию можно импортировать, но тестовый код выполняется только при прямом запуске
def add(a, b):
    return a+b

if __name__ == "__main__":  # Выполняется только при запуске файла, а не при импорте
    add(3, 5)
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Каково значение __name__, когда файл Python запускается напрямую как сценарий?
A. Имя файла
B. "**main**"
C. None
D. True

Преимущества

  1. Каждый модуль Python имеет определенное __name__, и если оно равно __main__, это означает, что модуль запускается пользователем автономно, и мы можем предпринять соответствующие действия.
  2. Если вы импортируете этот сценарий как модуль в другой сценарий, имя устанавливается в имя сценария/модуля.
  3. Файлы Python могут выступать либо в качестве многократно используемых модулей, либо в качестве автономных программ.
  4. if __name__ == "__main__": используется для выполнения некоторого кода только в том случае, если файл запускается напрямую, а не импортируется.
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Какова основная цель использования if __name__ == "__main__":?
A. Выполнять код только при прямом запуске файла, а не при импорте
B. Предотвратить импорт файла
C. Сделать выполнение файла быстрее
D. Скрыть код от других модулей

Связанные ссылки