Конструкцию if __name__ == '__main__' можно встретить практически в каждом Python. В рамках данного материала будет рассмотрено для чего она предназначена и какими будут последствия если ее не использовать.
Что такое if __name__ == '__main__' (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__' в питоне используется для того чтобы предотвратить мгновенное выполнение участков программного кода сразу при импортировании модулей что происходило бы без этой конструкции.