Содержание

Функции __name__ и __main__ в Python, запуск кода для начинающих

Предыдущий урок: Namedtuple

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

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

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

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

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

Копировать Скопировано Use a different Browser


def cookies():
print("Печенье вкусное!")

print("Дайте печенье. ")
cookies()

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

Дайте печенье.
Печенье вкусное!

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

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

main().

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

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

Копировать Скопировано Use a different Browser


def cookies():
print("Печенье вкусное!")

def main():
print("Дайте печенье. ")
cookies()

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

Копировать Скопировано Use a different Browser


main()

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

Дайте печенье.
Печенье вкусное!

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

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

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

Значение __name__

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

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

Копировать Скопировано Use a different Browser


print(__name__)

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

$ python print_name.py

Он вернет __main__.

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

Копировать Скопировано Use a different Browser


import print_name

Запустим его:

$ python main.py

Код вернет:

print_name

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

if __name__ == __main__ в Python

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

Копировать Скопировано Use a different Browser


if __name__ == "__main__":

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

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

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

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

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

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

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

Копировать Скопировано Use a different Browser


username = ""

После этого определим две функции. Первая будет просить пользователя ввести имя пользователя и проверять, не больше ли 5 символов в нем. Вторая будет выводить значение в оболочке Python:

Копировать Скопировано Use a different Browser


def choose_username():
global username
username = input("Введите логин: ")
if len(username) > 5:
print("Ваш логин сохранен.")
else:
print("Пожалуйста, выберите имя пользователя длиной более пяти символов.")
choose_username()

def print_username():
print(username)

В этом примере использовалось ключевое слово global, чтобы содержимое, присвоенное в методе choose_username(), было доступно глобально. После определения функций нужно создать

main, которая и будет их вызывать:


Копировать Скопировано Use a different Browser


def main():
choose_username()
print_username()

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

Копировать Скопировано Use a different Browser


if __name__ == "__main__":
main()

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

$ python username.py

Он вернет следующее:

Введите логин: mylogin
Ваш логин сохранен.
mylogin

Этот код запускает функцию choose_username(), а затем — print_username(). Если указать имя длиной меньше 4 символов, то ответ будет таким:

Введите логин: Li
Ваш логин сохранен.
Пожалуйста, выберите имя пользователя длиной более пяти символов. 
Введите логин:

Будет предложено ввести другое имя. Если импортировать этот код в качестве модуля, то функция main() не запустится.

Выводы

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

Далее: Функция zip()

Основная функция в Python и метод main(): описание с примерами

Главная » Основы

0

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

Что такое основная функция в Python?

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

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

print("Hello")

print("__name__ value: ", __name__)


def main():
    print("python main function")


if __name__ == '__main__':
    main()
  • Когда программа python выполняется, интерпретатор начинает выполнять код внутри нее. Он также устанавливает несколько неявных значений переменных, одно из них __name__, значение которого установлено как __main__.
  • Для основной функции мы должны определить функцию, а затем использовать условие if __name__ == ‘__main__’ для выполнения этой функции.
  • Если исходный файл импортируется как модуль, интерпретатор python устанавливает значение __name__ для имени модуля, поэтому условие if вернет false и основной метод не будет выполняться.
  • Python предоставляет нам гибкость, позволяющую сохранить любое имя для основного метода, однако лучше всего называть его методом main(). Код ниже вполне подходит, но не рекомендуется.
def main1():
    print("python main function")


if __name__ == '__main__':
    main1()

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

Основная функция, как модуль

Теперь давайте используем указанный выше исходный файл Python в качестве модуля и импортируем его в другую программу python_import.py.

import python_main_function

print("Done")

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

Hello __name__ value: python_main_function Done

Обратите внимание, что первые две строки печатаются из исходного файла python_main_function.py. Обратите внимание, что значение __name__ отличается, и, следовательно, основной метод не выполняется.

Операторы программы python выполняются построчно, поэтому важно определить метод main() сначала перед условием if для выполнения основного метода. В противном случае вы получите ошибку, так как NameError: имя ‘main’ не определено.

Рейтинг

( 1 оценка, среднее 5 из 5 )

Васильев А.Н. / автор статьи

Помогаю в изучении Питона на примерах. Автор практических задач с детальным разбором их решений.

Комментарии0 Поделиться:

Загрузка . ..

Определение основных функций в Python — Real Python