Найти в Дзене
Михаил Апельсинов

Что делает if __name__ == "__main__" в Python

Как и все начинающие разработчики я довольно часто в примерах кода натыкался на данную конструкцию, и какое-то время её назначение оставалось для меня загадкой. Однако, в том чтобы понять принцип её работы и использования нет абсолютно ничего сложного, нужно лишь один раз объяснить. Прежде всего нужно понять чем именно эта конструкция вызывает недоумение у начинающих разработчиков. Мне видится тут 2 основных причины. 1) Что за переменная __name__ , откуда берется и что она делает? Почему она вообще должна быть равна "__main__"? 2) На что вообще влияет это условие если не зависимо от добавления или удаления скрипт ведет себя одинаково? Ответы на эти вопросы лежат в областях, в которые начинающий разработчик мог ещё не успеть попасть и потому не до конца понимает как на них ответить. Попробую с минимальной информационной нагрузкой дать на них ответы. Что за переменная __name__ ? Переменная __name__ всегда существует внутри ваших программ или скриптов в момент выполнения и принимает зн
Пример использования if __name__ == "__main__" в коде простенького модуля
Пример использования if __name__ == "__main__" в коде простенького модуля

Как и все начинающие разработчики я довольно часто в примерах кода натыкался на данную конструкцию, и какое-то время её назначение оставалось для меня загадкой. Однако, в том чтобы понять принцип её работы и использования нет абсолютно ничего сложного, нужно лишь один раз объяснить.

Прежде всего нужно понять чем именно эта конструкция вызывает недоумение у начинающих разработчиков. Мне видится тут 2 основных причины.

1) Что за переменная __name__ , откуда берется и что она делает? Почему она вообще должна быть равна "__main__"?

2) На что вообще влияет это условие если не зависимо от добавления или удаления скрипт ведет себя одинаково?

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

Что за переменная __name__ ?

Переменная __name__ всегда существует внутри ваших программ или скриптов в момент выполнения и принимает значения в зависимости от того как ваш сприпт запущен. Если коротко, то запуская скрипт напрямую через команду python my_math.py внутри него всегда будет доступна переменная __name__ и равна она будет "__main__".

Обращаемся к переменной __name__ внутри вызываемого модуля my_math
Обращаемся к переменной __name__ внутри вызываемого модуля my_math

Однако, ситуация будет другая если вы импортируете какой-то модуль внутри которого сделаете print(__name__). Тогда имя которое вы увидите на экране будет равно названию модуля внутри которого находится вызов.

Импортируем модуль внутри другого файла и используем его
Импортируем модуль внутри другого файла и используем его

Именно это знание приводит нас к ответу на второй вопрос.

На что влияет это условие?

Оно влияет на выполнение кода который идет после этого условия. А именно если у вас есть модуль my_math.py внутри которого объявлено несколько функций и вы хотите их быстро протестировать, попробовать как они работают, то пишите это условие и ниже него работайте с функциями. После этого даже если вы импортируете ваш модуль, то код ниже этого условия никак не повлияет на импорт. Если этого условия не будет, то импорт модуля будет сопровождаться выполнением когда ниже.

Добавляем в модуль my_math условие if __name__ == "__main__"
Добавляем в модуль my_math условие if __name__ == "__main__"

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

В тройных кавычках результат работы данного модуля с импортом my_math
В тройных кавычках результат работы данного модуля с импортом my_math

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

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

Если хотите прокачаться в Python с нуля, то приглашаю на свой авторский курс Python: Быстрый старт.

Если вам интересно узнать больше про организацию кода в python, то рекомендую посмотреть моё видко на эту тему:

Спасибо за внимание!