Что такое main в python

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

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

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

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

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

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

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

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

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

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

Значение __name__

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

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

if __name__ == __main__ в Python

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

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

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

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

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

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

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

Источник

Функция main() в Python – примеры использования

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

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

Функция main() в Python считается уникальной функцией для нескольких языков программирования, также называемой точкой выполнения для файла программы. Однако интерпретатор языка программирования Python выполняет каждую из строк последовательно, начиная с верхней части файла, и не имеет явной функции main().

Python предоставляет другие способы для определения точки выполнения. Один из них использует функцию main() вместе со свойством __name__ файла python.

Теперь давайте разберемся с переменной __name__ в языке программирования Python.

Что такое аргумент __name__ в Python?

Аргумент __name__ в Python – это уникальная основная переменная, которая отображает имя текущего модуля.

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

Выполнение файла Python как скрипта

Допустим, у нас есть файл Python, известный как myworld.py, содержащий следующее содержимое:

В приведенном выше программном файле мы напечатали значение свойства __name__. В результате значение переменной __name__ устанавливается на __main__.

Выполнение файла Python как модуля

Мы также можем выполнить файл Python как модуль. Для этого нам нужно импортировать требуемый файл в другую программу Python. Давайте рассмотрим следующий пример, чтобы правильно понять концепцию.

Предположим, что мы создали файл Python как python_main.py в том же каталоге, что и файл myworld.py со следующим содержимым:

В приведенном выше программном файле мы импортировали модуль как myworld. В результате, когда мы выполняли файл python_main.py, программа запускала полный код в файле модуля. Однако мы можем заметить, что вместо __main__ отображается имя модуля myworld.

Это происходит потому, что в контексте выполнения файла Python как модуля само имя модуля присваивается переменной __name__.

Использование оператора if с переменной __name__

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

Давайте рассмотрим следующий пример, в котором мы изменили содержимое файла myworld.py.

В приведенном выше фрагменте кода мы определили функцию main() для печати некоторых строк для пользователей. Затем мы использовали условное предложение if, чтобы проверить, равно ли значение переменной __name__ __main__, после чего будет выполнена функция main(). В результате, когда мы выполняем файл myworld.py, для пользователя печатается строковое сообщение.

Однако, когда мы выполняем файл как модуль, импортируя его в python_main.py, программа не возвращает никаких результатов, поскольку функция main() не вызывается.

Таким образом, мы можем заключить, что пользовательская функция main(), которую мы определили в файле myworld.py, может выполняться только как автономный скрипт, но не как импортированный модуль.

Это стандартный метод явного определения функции main() в Python и один из самых популярных вариантов использования свойства __name__ файла 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

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

Источник

Python: __name__ == «__main__»

Что такое main в python. Смотреть фото Что такое main в python. Смотреть картинку Что такое main в python. Картинка про Что такое main в python. Фото Что такое main в python

Если вы некоторое время программировали на Python или просто просматривали репозитории Python Github, вы, вероятно, натолкнулись на этот фрагмент кода.

Фактически, именно столько раз этот фрагмент кода появляется в Github!

Что такое main в python. Смотреть фото Что такое main в python. Смотреть картинку Что такое main в python. Картинка про Что такое main в python. Фото Что такое main в python

Итак, без дальнейших церемоний, давайте изучим, что именно делает этот фрагмент кода.

Что такое __name__?

__name__ – это просто встроенная переменная в Python, которая оценивает имя текущего модуля.

Чтобы полностью понять, что такое __name__ и как оно используется, давайте рассмотрим ряд примеров.

Пример 1

Давайте создадим простой скрипт Python в файле с именем test.py

Эта строка будет выводить переменную __name__ на экране, чтобы мы могли ее изучить.

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

Вот вывод, который вы увидите на экране.

Из этого можно сделать вывод, что в этом примере переменной __name__ было присвоено строковое значение __main__

Теперь давайте посмотрим на немного другой пример.

Пример 2

Давайте создадим новый файл test2.py в том же каталоге, что и test.py

В этом новом файле давайте импортируем test, чтобы мы могли проверить переменную __name__ в test.py, а также напечатаем переменную __name__ в test2.py

Если вы запустите скрипт test2.py из терминала, это то, что вы увидите на своем экране.

Хм, интересно, так что же происходит?

По сути, происходит то, что __name__ устанавливается на уровне модуля.

Устанавливается на имя модуля. Другими словами, для каждого модуля в вашем коде, __name__ будет установлен на это имя модуля.

А для точки входа выполнения, основного сценария Python, переменная __name__будет установлена ​​в __main__

Это круто и все, но как эта специальная переменная используется на практике?

Как __name__ используется в реальных приложениях?

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

Например, давайте создадим фиктивный модуль hello.py, который другие смогут импортировать в свои собственные сценарии или могут напрямую выполнить его, если захотят.

Вот что должен делать этот модуль.

Если вы выполняете модуль напрямую, он должен напечатать Привет, AndreyEx на экране.

Но если вы вместо этого импортируете его, он может предоставить вам функцию hello(), где вы можете контролировать, кого приветствовать.

Теперь давайте создадим основной скрипт main.py, который будет импортировать модуль hello.

Мы просто получаем Привет, AndreyEx! на экране, так как условие if внутри модуля hello будет выполнено!

Как насчет того, чтобы вместо этого мы выполним main.py?

Теперь мы получим только Привет, AndreyEx! напечатано на экране.

Если вы не включили условие if в свой модуль, вы получите этот нежелательный результат при запуске основного скрипта.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Русские Блоги

Подробное объяснение _main_ и _init_ в Python

Как понять, есть ли __name__ == ‘__ main__’ в Python

Вступление в программу

Для многих языков программирования программа должна иметь вход, например C, C ++, а также полностью объектно-ориентированные языки программирования Java, C # и т. Д. Если вы имели дело с этими языками, вы должны хорошо понимать концепцию входа в программу. И C, и C ++ должны иметь функцию main в качестве точки входа в программу, то есть выполнение программы будет начинаться с функции main. Точно так же Java и C # должны иметь основной класс, содержащий метод Main в качестве записи программы.

Python другой. Он принадлежит к языку сценариев. В отличие от компилируемого языка, программа компилируется в двоичный файл и затем запускается, но динамически интерпретируется построчно. То есть он запускается с первой строки скрипта, и единой точки входа нет.

Помимо непосредственного запуска файл исходного кода Python также может быть импортирован как модуль (то есть библиотека). Независимо от того, импортирован он или запускается напрямую, будет выполняться самый верхний код (Python использует отступы для различения уровней кода). Фактически, при импорте есть часть кода, которую мы не хотим выполнять.

Чтобы проиллюстрировать пример, предположим, что у нас есть файл const.py со следующим содержимым:

Мы определили некоторые константы в этом файле, а затем написали основную функцию для вывода определенных констант. Наконец, запуск основной функции эквивалентен ручной проверке определений, чтобы убедиться, что значения установлены правильно. Затем мы напрямую выполняем файл (python const.py), выводим:

Теперь у нас есть файл area.py для вычисления площади круга. В этом файле используется переменная PI из файла const.py. Затем мы импортируем переменную PI из const.py в area.py:

Запустите area.py и выведите результат:

Как видите, функция main в const также выполняется. На самом деле, мы не хотим, чтобы она выполнялась. Main предоставляется только для проверки определения константы. На данный момент, if __name__ == ‘__main__’ Пригодилось. Немного измените const.py:

Затем запустите area.py, результат будет следующим:

Затем запустите const.py, результат будет следующим:

Это тот эффект, который нам нужен.

if __name__ == ‘__main__’ Эквивалент PythonСмоделированный вход в программу. Сам Python не предусматривает такого написания, это просто привычка кодировать. Из-за взаимных ссылок между модулями разные модули могут иметь такие определения, но программа входа может быть только одна. Выбор программы поступления зависит от __name__ Значение.

__name__

__name__ Это встроенная переменная, используемая для представления имени текущего модуля, а также отражающая структуру пакета. Например, предположим, что существует следующий пакет:

Содержимое всех файлов py в каталоге:

Здесь tornado и tornado.web называются именами модулей.

и другие, if __name__ == ‘__main__’ Наше простое понимание:Если модуль запускается напрямую, блок кода запускается, если модуль импортируется, блок кода не запускается

Давайте сначала рассмотрим простой пример. Предположим, что существует файл Python run.py со следующим содержимым:

Мы начинаем с прямого запуска (python run.py) и выводим результат (чтобы проиллюстрировать проблему, результат вывода перехватывает только важную часть, то же самое ниже):

Этот пример не ясно иллюстрирует проблему. Тогда давайте посмотрим __main__.py Роль.

Рассмотрим сначала пример, есть следующий пакет:

использовать python package результат операции:

Тогда подведем итоги:

Как понять python __init__.py

При создании пакета в папке появится файл __init__.py
Функция файла init.py заключается в том, чтобы превратить папку в модуль Python, а каждый пакет модуля в Python содержит файл __init__.py.

Обычно файл __init__.py пуст, но мы можем добавить в него другие функции. Когда мы импортируем пакет, мы фактически импортируем его файл __init__.py. Таким образом, мы можем пакетно импортировать необходимые нам модули в файл __init__.py вместо того, чтобы импортировать их по одному.
Базовая структура каталогов показана на рисунке 1. __init__.py из TestB и __init__.py из TestB импортируются двумя способами.

Содержимое файла под testa:

Содержимое тестируемого файла B равно
testb1.py

testb.py

__init__.py теста

__init__.py из testB

При вызове первый метод можно напрямую

Второй способ можно использовать напрямую

Конечно, его можно использовать обоими способами, например, непосредственно в файле __init__.py testB.

Источник

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

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