Что такое name main

Содержание

Конструкци if __name__ == ‘__main__’: main() в Python определяет какая функция будет исполняться в качестве основной. Обычно это main().

В Python есть понятие namespace. main — основной namespace, с ним происходит работа из оболочки, каждый импортируемый модуль относится к другому namespace, имя которого совпадает с именем модуля.

Если пишется простой CGI скрипт на питоне можно не указывать «if name main». Скрипт при этом будет успешно отрабатывать если выполнять его из консоли или, например, поместить в CRON.

Значение у «if name main» появляется тогда когда написанный скрипт/модуль импортируется для того, чтобы использоваться в других программах.

Напишет простой скрипт test.py

if __name__ == ‘__main__’:
print (‘No module’)
else:
print (‘Running where imported a module’)

Теперь проведем два эксперимента. Сначала обратимся к скрипту из консоли:

No module

Теперь авторизуемся в оболочке Python

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.

И импортируем модуль

Running where imported a module

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

def main():
print («It’s from main function»)

if __name__ == ‘__main__’: main()

Выполняем скрипт из консоли

It’s from main function

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

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.

На этом этапе строки не выводится. Также не будут выполнены никакие участки настоящей программы.

Чтобы выполнение произошло нужно обратиться к функции.

It’s from main function

Таким образом, if __name__ == ‘__main__’ в питоне используется для того чтобы предотвратить мгновенное выполнение участков программного кода сразу при импортировании модулей что происходило бы без этой конструкции.

Что происходит во время вызоват if __name__ == "__main__": ?

1 Ответы

Когда интерпретатор Python читает исходный файл, он исполняет весь найденный в нем код. Перед тем, как начать выполнять команды, он определяет несколько специальных переменных. Например, если интерпретатор запускает некоторый модуль (исходный файл) как основную программу, он присваивает специальной переменной __name__ значение "__main__" . Если этот файл импортируется из другого модуля, переменной __name__ будет присвоено имя этого модуля.

В случае с вашим сценарием, предположим, что код исполняется как основная функция, например:

После задания специальный переменных интерпретатор выполнит инструкцию import и загрузит указанные модули. Затем он проанализирует блок def , создаст объект-функцию и переменную под названием myfunction , которая будет указывать на этот объект.

Затем он прочтет инструкцию if , «поймёт», что __name__ эквивалентен "__main__" , и выполнит указанный блок.

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

Что означает «threading_example в данный момент импортируется из другого модуля»?

Что происходит во время вызоват if __name__ == "__main__": ?

1 ответ 1

Когда интерпретатор Python читает исходный файл, он исполняет весь найденный в нем код. Перед тем, как начать выполнять команды, он определяет несколько специальных переменных. Например, если интерпретатор запускает некоторый модуль (исходный файл) как основную программу, он присваивает специальной переменной __name__ значение "__main__" . Если этот файл импортируется из другого модуля, переменной __name__ будет присвоено имя этого модуля.

В случае с вашим сценарием, предположим, что код исполняется как основная функция, например:

После задания специальный переменных интерпретатор выполнит инструкцию import и загрузит указанные модули. Затем он проанализирует блок def , создаст объект-функцию и переменную под названием myfunction , которая будет указывать на этот объект.

Затем он прочтет инструкцию if , «поймёт», что __name__ эквивалентен "__main__" , и выполнит указанный блок.

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

Что означает "threading_example в данный момент импортируется из другого модуля"?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *