Конструкция if __name__ == '__main__' в Python

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