Python if name main что значит

Использование if __name__ == «__main__» в Python

В данном руководстве мы рассмотрим для чего используется условие if name == «__main__» в Python, и в каких случаях оно нам может пригодиться.

Введение

Это стандартный код, который защищает пользователей от случайного вызова сценария, когда они не собирались этого делать, и его применение является хорошей практикой.

Это имеет значение для этих двух случаев использования:

  • Мы запускаем его как основную программу с помощью python filename.py
  • Импортируем файл в другой файл с помощью import filename

В последнем случае обычно мы хотим только импортировать модуль, а затем позже в коде выполнить некоторые функции или использовать класс из этого файла. Именно здесь вступает в игру оператор if __name__ == «main», который работает как защитник.

Давайте выясним, почему и как это работает.

Специальная переменная

Когда интерпретатор Python читает исходный файл, он делает две вещи:

  • Во-первых, он устанавливает несколько специальных переменных, таких как __name__.
  • Затем он выполняет весь код, который находит в файле.

Давайте посмотрим на следующий пример, где мы правильно используем оператор if __name__ == «main»:

Первый случай использования

Запустите его как основную программу с помощью python testa.py.

Интерпретатор Python присвоит переменной __name__ жестко закодированную строку «main», и таким образом код в операторе if будет выполнен:

Второй случай использования

Импортируйте testa в качестве модуля.

Интерпретатор присвоит «testa» переменной __name__ в модуле testa. Таким образом, код в операторе if не будет выполнен, и func_one не запустится.

Без if __name__ == «main» в testa.py вывод был бы следующим:

Обычно это не то, что нам нужно. Поэтому, если вы хотите запустить код в файле, хорошей практикой будет обернуть весь этот код в оператор if __name__ == «main».

Заключение

В этой статье мы рассмотрели различные способы использования инструкции if __name__ == «main». Научились применять их на практики и теперь знаем как использовать их у себя в проекте.

Источник

№37 Функция __main__ / для начинающих

В различных руководствах по Python часто используется функция main() . Но иногда это может быть и лишним.

Лаконичность — важный элемент программирования. И вполне логично задавать вопрос о том, зачем разработчику добавлять лишние строки в программу. Функция main() требует дополнительных строк, но она служит определенной цели.

В этом материале речь пойдет о функции main() , о том, какую пользу она приносит, а также о том, как правильно использовать ее в коде.

Что такое функция main()?

Main — это специальная функция, которая позволяет добавить больше логики в структуру программ. В Python можно вызвать функцию в нижней части программы, которая и будет запущена. Рассмотрим такой пример:

Запустим этот код:

Можно увидеть, что выражение «Дайте печенье.» выводится до «Печенье вкусное!», потому что метод cookies() не вызывается вплоть до последней строки, а именно в этой функции хранится предложение «Печенье вкусное!».

Такой код работает, но его довольно сложно читать. В таких языках программирования, как C++ и Java весь основной код программы хранится внутри основной функции. Это хороший способ для распределения всего кода программы. Те, кто только знакомится с Python, но уже работал, например, с C++ будут благодарны за использование функции main() .

Как создать функцию main

Есть две части основной функции Python. Первая — сама функция main() . В ней хранится код основной программы. Вызовем функцию cookies() и выведем выражение «Дайте печенье.» из функции main() :

Теперь вызовем функцию в конце программы:

Можно запустить код:

Результат не поменялся. Но теперь сам код читать легче. Пусть в нем и больше строк (и одна дополнительная строка), вполне очевидно, что именно происходит:

  • Cookies() — функция, которая выводит «Печенье вкусное!».
  • Когда программа запускается, определяются две функции: cookies() и main() .
  • Затем функция main() вызывается.
  • «Дайте печенье.» выводится в консоли.
  • Затем вызывается функция cookies() , которая выводит в консоль «Печенье вкусное!».

Код не только чище, но и логичнее. Если вы пришли из другого языка, например, Java, но знаете, насколько это удобно.

Значение __name__

Прежде чем переходить к инструкциям __name__ и __main__ , которые часто используются вместе, нужно обсудить __name__ . __name__ хранит название программы.

Если запустить файл прямо, то значением __name__ будет __main__ . Предположим, что файл называется print_name.py :

Этот код можно запустить следующим образом:

Он вернет __main__ .

Предположим, что этот код был импортирован в качестве модуля в файл main.py :

Код внутри print_name.py исполняется потому что он был импортирован в качестве модуля в основной программе. Файл print_name выводит __name__ в консоль. Поскольку print_name был импортирован в качестве модуля, то и значением __name__ является print_name .

if __name__ == __main__ в Python

Вы наверняка встречали следующую конструкцию в программах на Python в функции main :

Что она значит? В Python любая переменная, начинающаяся с двух символов нижнего подчеркивания ( __ ), является специальной. Это зарезервированные значения, которые выполняют определенную роль в программе.

__main__ указывает на область видимости, где будет выполняться код. Если запустить Python-файл прямо, то значением __name__ будет __main__ . Если же его запустить в качестве модуля, то значением будет уже не __main__ , а название модуля.

Это значит, что строка выше вернет True только в том случае, если программа будет запущена прямо.

Если же ссылаться на файл как на модуль, то содержимое конструкции if не будет выполнено. Рассмотрим на примере.

Как использовать __name__ и __main__

Создадим новый скрипт на Python под названием username.py. В коде будем просить пользователя ввести его имя и проверять, не является ли его длина больше 5. Если символов не больше 5, то попросим ввести имя снова.

Начнем с определения глобальной переменной для хранения имени пользователя:

Источник

Что делает if __name__ == “__main__”?

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

1 ответ 1

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

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

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

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

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

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

Источник

Что делает if __name__ == «__main__»?

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

Иногда некоторые скрипты могут играть роль и подключаемого модуля, и отдельно исполняемого файла. Поэтому из соображений безопасности следует делать проверку, чтобы код неожиданно не выполнился, если кто-то импортирует скрипт как модуль.

В процессе исполнения файла интерпретатор сам устанавливает особую строковую переменную __name__ , которая будет равна «__main__» , когда этот скрипт запущен непосредственно и будет равна названию модуля, если он импортирован из другого файла.

Рассмотрим пример. Файл one.py:

При запуске python one.py будет:

Пусть в другом файле two.py импортируем one:

Запуск python two.py даст:

Вывод такой: эта конструкция не является чем-то обязательным, а скорее правилом хорошего тона, чтобы ваш код не делал неожиданных вещей. Старайтесь ей пользоваться.

Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈

Источник

if __name__ == «__main__» ¶

Достаточно часто скрипт может выполняться и самостоятельно, и может быть импортирован как модуль другим скриптом. Так как импорт скрипта запускает этот скрипт, часто надо указать, что какие-то строки не должны выполняться при импорте.

В предыдущем примере было два скрипта: check_ip_function.py и get_correct_ip.py. И при запуске get_correct_ip.py, отображались print из check_ip_function.py.

В Python есть специальный прием, который позволяет указать, что какой-то код не должен выполняться при импорте: все строки, которые находятся в блоке if __name__ == ‘__main__’ не выполняются при импорте.

Переменная __name__ — это специальная переменная, которая будет равна «__main__» , только если файл запускается как основная программа, и выставляется равной имени модуля при импорте модуля. То есть, условие if __name__ == ‘__main__’ проверяет, был ли файл запущен напрямую.

Как правило, в блок if __name__ == ‘__main__’ заносят все вызовы функций и вывод информации на стандартный поток вывода. То есть, в скрипте check_ip_function.py в этом блоке будет все, кроме импорта и функции return_correct_ip:

Результат выполнения скрипта:

При запуске скрипта check_ip_function.py напрямую, выполняются все строки, так как переменная __name__ в этом случае равна ‘__main__’ .

Скрипт get_correct_ip.py остается без изменений

Выполнение скрипта get_correct_ip.py выглядит таким образом:

Теперь вывод содержит только информацию из скрипта get_correct_ip.py.

В целом, лучше привыкнуть писать весь код, который вызывает функции и выводит что-то на стандартный поток вывода, внутри блока if __name__ == ‘__main__’ .

Начиная с 9 раздела, для заданий есть программные тесты, с помощью которых можно проверить правильность выполнения заданий. Для корректной работы с тестами, надо всегда писать вызов функции в файле задания внутри блока if __name__ == ‘__main__’ . Отсутствие этого блока будет вызывать ошибки, не во всех заданиях, однако это все равно позволит избежать проблем.

Источник

Читайте также:  C reactive protein повышен что это значит
Оцените статью