Заполнять жизнь — это еще не значит обогащать ее (Из книги «Пи").

Python: __name__ == «__main__»

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
6 декабря 2019
Как установить Python 3 на Ubuntu 16.04 LTS
Вы видите это везде.

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

if __name__ == '__main__':
  # do something

 

Он вездесущий.

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

Python: __name__ == «__main__»

18 миллионов + раз!

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

 

Что такое __name__?

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

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

 

Пример 1

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

# test.py
print("__name__ в test.py имеет значение " + __name__)

 

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

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

$ python test.py

 

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

$ python3 test.py
__name__ в test.py имеет значение __main__

 

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

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

 

Пример 2

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

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

# test2.py
import test

print("__name__ in test2.py имеет значение " + __name__)

 

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

$ python3 test2.py
__name__ in test.py имеет значение test
__name__ in test2.py имеет значение __main__

 

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

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

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

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

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

 

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

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

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

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

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

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

# hello.py
def hello(name):
  print(f"Привет, {name}!")

if __name__ == '__main__':
  hello('AndreyEx')

 

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

# main.py
from hello import hello

hello('Destroyer')

 

Как вы думаете, что произойдет, если мы напрямую запустим hello.py ?

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

$ python3 hello.py
Привет, AndreyEx!

 

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

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

$ python3 main.py
Привет, Destroyer!

 

Но что, если мы не включили условие if __name__ == ‘main’ в модуль hello ?

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

$ python3 main.py
Привет, AndreyEx!
Привет, Destroyer!

 

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

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

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

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

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close