Язык программирования Python

Что делает if __name__ == «__main__»: в Python?

Вы наверняка не раз видели и даже использовали эту строку кода:

... if __name__ == '__main__': ...
Code language: JavaScript (javascript)

Знаете ли вы, что она делает и зачем она нужна? Давайте разберемся.

Когда интерпретатор Python читает исходный код из файла, он выполняет весь код внутри этого файла. Даже если это просто импорт библиотеки.

Однако бывают случаи, когда мы не хотим выполнять весь код в файле, а хотим импортировать класс или функцию.

Чтобы предотвратить такую ситуацию, интерпретатор Python предоставляет вам переменную __name__.

Эта переменная обычно содержит следующие значения:

  • __main__: если данный модуль запущен в качестве основной программы
  • Имя файла: если, например, ваш файл называется modul.py и вы импортируете его, значение будет modul.
  • __console__: в исключительных случаях. Например, в Django, когда модуль выполняется как часть команд этого фреймворка.

Давайте рассмотрим пример.

Example.py

В качестве примера рассмотрим следующий код.

# Example.py print("создание функции 1") def funcion1(): print("выполнение функции 1") print("создание функции 2") def funcion2(): print("выполнение функции 2") print("предварительная проверка __name__") if __name__ == '__main__': funcion1() funcion2() print("окончание блока __name__")
Code language: PHP (php)

Специальные параметры

Посмотрим на содержимое __name__ в зависимости от способа выполнения модуля example.py.

Когда ваш модуль является основной программой

Если вы запустите свой модуль в качестве основной программы:

python foo.py
Code language: CSS (css)

Интерпретатор присвоит значение __main__ переменной __name__. Точно так же, как если бы первая строка кода в вашем файле была:

__name__ = "__main__"
Code language: JavaScript (javascript)

Что произойдет, если вы запустите файл? Вы получите следующие сообщения:

%> python example.py // создание функции 1 (без выполнения) созданиеаниеиее1 // создание функции 2 (без выполнения) созданиеаниеиее2 предварительная // основная программа // __name__ == "__main__" возвращает true // поэтому он выполняет обе функции выполнениенение1 выполнениенение2 // итог окончание
Code language: JavaScript (javascript)

Когда ваш модуль импортируется другим

Предположим, что example.py не является основным модулем, а импортирован из другого. Например, если мы импортируем его из консоли Python:

%> python >>> import example
Code language: JavaScript (javascript)

Интерпретатор будет искать ваш файл example.py и перед выполнением вашего модуля присвоит переменной name значение example, как если бы следующая строка была выполнена в начале вашего файла:

__name__ = "example"
Code language: JavaScript (javascript)

Далее.

%> python >>> import example // создание функции 1 (без выполнения) созданиеаниеиее1 // создание функции 2 (без выполнения) созданиеаниеиее2 предварительная // основная программа // __name__ == "__main__" вернет false // поэтому функции не выполняются // итог окончание
Code language: JavaScript (javascript)

В качестве итога.

Вы можете использовать if name == ‘main‘: для защиты части кода. Таким образом, вы можете быть уверены, что блок будет выполнен только в том случае, если ваш модуль является основной программой.

Зачем это нужно?

Бывают случаи, когда вы хотите написать модуль Python, который может быть импортирован другими программами и может быть использован в качестве основной программы. Например:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *