Рекомендуется применять эту конструкцию. Узнайте, почему и как это работает.
Это шаблонный код, который защищает пользователей от случайного вызова скрипта, когда они не собирались этого делать, и его применение является хорошей практикой. Это имеет значение для этих двух вариантов использования:
- Запускаем его как основную программу с
python filename.py
- Мы импортируем файл в другой файл с помощью
import filename
В последнем случае обычно мы хотим только импортировать модуль, а затем позже в коде выполнить некоторые функции или использовать класс из этого файла. Здесь if __name__ == "__main__"
утверждение вступает в игру и работает как охрана.
Давайте узнаем, почему и как это работает.
Специальная переменная
Когда интерпретатор Python читает исходный файл, он делает две вещи:
- Во-первых, он устанавливает несколько специальных переменных, таких как
__name__
- Затем он выполняет весь код, найденный в файле.
Давайте посмотрим на следующий пример, где мы правильно используем if __name__ == "__main__"
оператор:
# This is foo.py
def functionA():
print("Function A")
if __name__ == "__main__":
print("Running foo")
functionA()
Случай 1: Запустите его как основную программу с расширением python foo.py
Интерпретатор Python назначит жестко запрограммированную строку "__main__"
переменной __name__
, таким образом, будет выполнен код в операторе if:
$ python foo.py
Running foo
Function A
Случай 2: Импорт foo
в другой модуль
Интерпретатор присвоит "foo"
значение __name__
переменной в модуле foo . Таким образом, код в операторе if не выполняется и functionA
не будет выполняться.
# This is bar.py import foo if __name__ == "__main__": print("Running bar")
$ python bar.py Running bar
Без if __name__ == "__main__"
in foo.py вывод будет следующим:
$ python bar.py Running foo Function A Running bar
Обычно это не то, что мы хотим. Поэтому, если вы хотите запустить код в файле, хорошей практикой будет заключить весь этот код в if __name__ == "__main__"
выражение.