Конструкцию if __name__ == '__main__' можно встретить практически в каждом Python.
В рамках данного материала будет рассмотрено для чего она предназначена и какими будут последствия если ее не использовать.
Конструкци if __name__ == '__main__': main() в Python определяет какая функция будет исполняться в качестве основной. Обычно вызывается main().
В Python есть понятие namespace. main — основной namespace, с ним происходит работа из оболочки, каждый импортируемый модуль относится к другому namespace, имя которого совпадает с именем модуля.
Если пишется простой CGI скрипт на питоне можно не указывать 'if_name main'. Скрипт при этом будет успешно отрабатывать если выполнять его из консоли или, например, поместить в CRON.
Конструкция добавляется тогда когда написанный скрипт/модуль импортируется для того, чтобы использоваться в других программах.
Пример if name == 'main' в скрипте
Напишет простой скрипт test.py
mcedit test.py
if __name__ == '__main__':
print ('No module')
else:
print ('Running where imported a module')
Теперь проведем два эксперимента. Сначала обратимся к скрипту из консоли:
python3 test.py
No module
Теперь авторизуемся в оболочке Python
python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type 'help', 'copyright', 'credits' or 'license' for more information.
И импортируем модуль
>>> import test
Running where imported a module
Конструкция определяющая какой фрагмент кода исполнять фактически всегда указывается последней строкой в скрипте, ниже еще один пример
mcedit test.py
def main():
print ('It's from main function')
if __name__ == '__main__': main()
Выполняем скрипт из консоли
python3 test.py
It's from main function
Строка выводится, если модуль импортировать действия указанного для функции не произойдет. Оно выполнится только если фактически будет обращение
python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type 'help', 'copyright', 'credits' or 'license' for more information.
>>> import test
На этом этапе строки не выводится. Также не будут выполнены никакие участки настоящей программы.
Чтобы выполнение произошло нужно обратиться к функции.
>> test.main()
It's from main function
Таким образом, if __name__ == '__main__' в python используется для того чтобы предотвратить мгновенное выполнение участков программного кода сразу при импортировании модулей что происходило бы без этой конструкции.
Читайте про виртуальное окружение, в него часто устанавливаются стандартные модули импортируемые в скриптах.