Рекомендуется применять эту конструкцию. Узнайте, почему и как это работает.

Это шаблонный код, который защищает пользователей от случайного вызова скрипта, когда они не собирались этого делать, и его применение является хорошей практикой. Это имеет значение для этих двух вариантов использования:

  • Запускаем его как основную программу с 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__" выражение.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии