Метка: if

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

В Python нет какой-то специально выделенной функции main(), вы можете создать любую функции сами и вызвать ее где-то на верхнем уровне кода (это значит с нулевым отступом слева). Когда Python читает файл py, он выполняет весь код, который в нем содержится (за исключением тел методов и функций, конечно). Причем код выполняется в обоих случаях: а) если файл запущен напрямую б) если импортирован из другого скрипта.

Иногда некоторые скрипты могут играть роль и подключаемого модуля, и отдельно исполняемого файла. Поэтому из соображений безопасности следует делать проверку, чтобы код неожиданно не выполнился, если кто-то импортирует скрипт как модуль.

В процессе исполнения файла интерпретатор сам устанавливает особую строковую переменную __name__, которая будет равна "__main__", когда этот скрипт запущен непосредственно и будет равна названию модуля, если он импортирован из другого файла.

Рассмотрим пример. Файл one.py:

# one.py
def func():
    print("какая-то функция func() из one.py")

print("one.py: всегда")

if __name__ == "__main__":
    print("one.py запущен напрямую")
else:
	# здесь __name__ == "one"
    print("one.py импортируется из другого скрипта")

При запуске python one.py будет:

one.py: всегда
one.py запущен напрямую

Пусть в другом файле two.py импортируем one:

# two.py
import one
one.func()

Запуск python two.py даст:

one.py: всегда
one.py импортируется из другого скрипта
какая-то функция func() из one.py

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

Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈