Предыдущий урок: Namedtuple
В различных руководствах по Python часто используется функция main()
. Но иногда это может быть и лишним.
Лаконичность — важный элемент программирования. И вполне логично задавать вопрос о том, зачем разработчику добавлять лишние строки в программу. Функция main()
требует дополнительных строк, но она служит определенной цели.
В этом материале речь пойдет о функции main()
, о том, какую пользу она приносит, а также о том, как правильно использовать ее в коде.
Что такое функция main()?
Main — это специальная функция, которая позволяет добавить больше логики в структуру программ. В Python можно вызвать функцию в нижней части программы, которая и будет запущена. Рассмотрим такой пример:
def cookies():
print("Печенье вкусное!")
print("Дайте печенье.")
cookies()
Запустим этот код:
Дайте печенье.
Печенье вкусное!
Можно увидеть, что выражение «Дайте печенье.» выводится до «Печенье вкусное!», потому что метод cookies()
не вызывается вплоть до последней строки, а именно в этой функции хранится предложение «Печенье вкусное!».
Такой код работает, но его довольно сложно читать. В таких языках программирования, как C++ и Java весь основной код программы хранится внутри основной функции. Это хороший способ для распределения всего кода программы. Те, кто только знакомится с Python, но уже работал, например, с C++ будут благодарны за использование функции main()
.
Как создать функцию main
Есть две части основной функции Python. Первая — сама функция main()
. В ней хранится код основной программы. Вызовем функцию cookies()
и выведем выражение «Дайте печенье.» из функции main()
:
def cookies():
print("Печенье вкусное!")
def main():
print("Дайте печенье.")
cookies()
Теперь вызовем функцию в конце программы:
main()
Можно запустить код:
Дайте печенье.
Печенье вкусное!
Результат не поменялся. Но теперь сам код читать легче. Пусть в нем и больше строк (и одна дополнительная строка), вполне очевидно, что именно происходит:
Cookies()
— функция, которая выводит «Печенье вкусное!».- Когда программа запускается, определяются две функции:
cookies()
иmain()
. - Затем функция
main()
вызывается. - «Дайте печенье.» выводится в консоли.
- Затем вызывается функция
cookies()
, которая выводит в консоль «Печенье вкусное!».
Код не только чище, но и логичнее. Если вы пришли из другого языка, например, Java, но знаете, насколько это удобно.
Значение __name__
Прежде чем переходить к инструкциям __name__
и __main__
, которые часто используются вместе, нужно обсудить __name__
. __name__
хранит название программы.
Если запустить файл прямо, то значением __name__
будет __main__
. Предположим, что файл называется print_name.py
:
print(__name__)
Этот код можно запустить следующим образом:
$ python print_name.py
Он вернет __main__
.
Предположим, что этот код был импортирован в качестве модуля в файл main.py
:
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
:
if __name__ == "__main__":
Что она значит? В Python любая переменная, начинающаяся с двух символов нижнего подчеркивания (__
), является специальной. Это зарезервированные значения, которые выполняют определенную роль в программе.
__main__
указывает на область видимости, где будет выполняться код. Если запустить Python-файл прямо, то значением __name__
будет __main__
. Если же его запустить в качестве модуля, то значением будет уже не __main__
, а название модуля.
Это значит, что строка выше вернет True
только в том случае, если программа будет запущена прямо.
Если же ссылаться на файл как на модуль, то содержимое конструкции if не будет выполнено. Рассмотрим на примере.
Как использовать __name__ и __main__
Создадим новый скрипт на Python под названием username.py.
В коде будем просить пользователя ввести его имя и проверять, не является ли его длина больше 5. Если символов не больше 5, то попросим ввести имя снова.
Начнем с определения глобальной переменной для хранения имени пользователя:
username = ""
После этого определим две функции. Первая будет просить пользователя ввести имя пользователя и проверять, не больше ли 5 символов в нем. Вторая будет выводить значение в оболочке Python:
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
, которая и будет их вызывать:
def main():
choose_username()
print_username()
После этого нужно добавить if __name__="__main__"
в инструкцию if
. Это значит, что при запуске файла прямо, интерпретатор Python исполнит две функции. Если же запустить код в качестве модуля, то содержимое внутри main()
исполнено не будет.
if __name__ == "__main__":
main()
Запустим код:
$ python username.py
Он вернет следующее:
Введите логин: mylogin
Ваш логин сохранен.
mylogin
Этот код запускает функцию choose_username()
, а затем — print_username()
. Если указать имя длиной меньше 4 символов, то ответ будет таким:
Введите логин: Li
Ваш логин сохранен.
Пожалуйста, выберите имя пользователя длиной более пяти символов.
Введите логин:
Будет предложено ввести другое имя. Если импортировать этот код в качестве модуля, то функция main()
не запустится.
Выводы
Функция main()
используется для разделения блоков кода в программе. Использование функции main()
обязательно в таких языках, как Java, потому что это упрощает понимание того, в каком порядке код запускается в программе. В Python функцию main()
писать необязательно, но это улучшает читаемость кода.
Далее: Функция zip()