Молодогвардейцев 454015 Россия, Челябинская область, город Челябинск 89085842764
MindHalls logo

Конструкция if __name__ == ‘__main__’: в Python

Наш любимый язык программирования Python является интерпретируемым. Это означает, что файл с кодом не нуждается в компиляции и сборке, а сам код исполняется последовательно с начала файла.

__name__ — это специальная внутренняя переменная, которая инициализируется, как ‘__main__’ если файл с исходным кодом был непосредственно запущен, а не импортирован. При импорте, переменная будет содержать имя модуля, из которого произошел импорт.

Допустим, проект состоит из двух файлов: main.py и func.py. Первый играет роль точки входа приложения, в нем происходит отрисовка графики и работа с пользовательским интерфейсом. А второй содержит логику — набор функций, которые вызываются из графики. Первый производит импорт второго. И отсюда появляется проблема. Весь код из func.py, кроме определений функций, исполнится. Это может помешать корректной работе всего приложения. Чтобы этого избежать, весь код, который не должен исполняться при импорте исходного файла можно поместить в блок if __name__ == ‘__main__’:

Пример

main.py

from func import *

#Будет напечатана только строка из фукнции
foo()

func.py

def foo():
    print('I am from func.py')

if __name__ == '__main__':
    #Будет напечатано при вызове func.py
    print('I am from console')

Говоря простым языком, if __name__ == ‘__main__’: является аналогом функции main(), точкой входа в приложение при запуске. Отличие в том, что в том же Си функция main() может быть только одна на весь проект. А в Питоне каждому модулю можно прописать поведение при непосредственном запуске.