Когда интерпретатор Python читает файл, то сначала он устанавливает несколько специальных переменных. Затем выполняет код из файла.
Когда интерпретатор Python читает файл, то сначала он устанавливает несколько специальных переменных. Затем выполняет код из файла.
Одной из таких переменных является __ name __.
В этом материале, Вы узнаете, как использовать специальную переменную __ name __, и почему она так важна.
Но давайте по порядку.
Модули Python.
Файлы Python называются модулями, и обозначаются расширением .py файл. Модуль может определять функции, классы и переменные.
Так что, когда интерпретатор обрабатывает модуль, переменная __ name __, будет установлена как __ main __ если модуль, который выполняется является основной программой.
Но если код импортирует модуль из другого модуля, то переменная __ name __ будет установлена на имя этого модуля.
Рассмотрим на примере вышесказанное. Создадим модуль Python с именем mod_one.py и вставим в него следующий код:
print("Module one __name__ is: {0}".format(__name__))
Запустив этот файл, вы увидите именно то, о чем говорили. Переменная __ name __ устанавливается как __ main __:
# вывод
Module one __name__ is: __main__
Теперь добавим еще один файл с именем mod_two.py и вставим следующий код:
print("Module two __name__ is: {0}" .format(__name__))
Кроме того, немного изменим код в mode_one.py, добавив импорт модуля mod_two:
import mod_two
print("Module one __name__ is: {0}".format(__name__))
Запуск нашего кода mod_one еще раз покажет, что переменная __ name __ в mod_one не изменилась и по-прежнему остается установленной в __ main __. Но теперь переменная __ name __ для mod_two задается как имя ее модуля, следовательно, mod_two.
# вывод
Module two __name__ is: mod_two
Module one __name__ is: __main__
Но запустите mod_two напрямую, и вы увидите, что его имя установлено на _ main_:
Module two __name__ is: __main__
Часто в программах используется связка:
if __name__ = 'main':
main()
Здесь мы говорим программе, выполнить код если запущенный модуль есть основная программа.
Таким образом, сочетая __ name __ с условной конструкцией, мы можем управлять поведением наших модулей так, как нам это нужно.
