Расскажу для чего мы пишем if __name__=='__main__' и кому это может пригодиться.
Важные моменты:
1) любой код на питоне лежит в модуле (файл с расширением py)
2) любой модуль при запуске программы получает атрибут __name__
3) один(!) модуль, с которого программа началась (точка входа) получает имя __main__, все остальные (которые импортированы) получают имя, равное имени в файловой системе, без расширения. Например first
4) Крайне важное для понимания! Любой модуль при импорте выполняется, как если бы мы его запустили отдельно. То есть все принты будут напечатаны(если они не в функциях), любой вызов функции выполнен.
if __name__=='__main__' означает "если этот модуль НЕ был импортирован, а запущен напрямую, то..." и все действия в данном блоке НЕ будут выполнены при импорте модуля.
Для чего это нужно в том числе новичку:
- группировать все наши действия, имеющие эффект, потом их просто найти и менять
- отладка, тесты, ассерты, при импорте они не выполнятся
- специфичные настройки для запуска
Подчеркну, что блок мейн вовсе не обязателен, это просто возможность что-то выполнять в модуле скажем для отладки так, чтобы не получить ненужные эффекты при импорте, если мы забыли отладочные вещи убрать.
Важные моменты:
1) любой код на питоне лежит в модуле (файл с расширением py)
2) любой модуль при запуске программы получает атрибут __name__
3) один(!) модуль, с которого программа началась (точка входа) получает имя __main__, все остальные (которые импортированы) получают имя, равное имени в файловой системе, без расширения. Например first
4) Крайне важное для понимания! Любой модуль при импорте выполняется, как если бы мы его запустили отдельно. То есть все принты будут напечатаны(если они не в функциях), любой вызов функции выполнен.
if __name__=='__main__' означает "если этот модуль НЕ был импортирован, а запущен напрямую, то..." и все действия в данном блоке НЕ будут выполнены при импорте модуля.
Для чего это нужно в том числе новичку:
- группировать все наши действия, имеющие эффект, потом их просто найти и менять
- отладка, тесты, ассерты, при импорте они не выполнятся
- специфичные настройки для запуска
Подчеркну, что блок мейн вовсе не обязателен, это просто возможность что-то выполнять в модуле скажем для отладки так, чтобы не получить ненужные эффекты при импорте, если мы забыли отладочные вещи убрать.
- Категория
- iMac
Комментарии выключены