Введение в переменную _ _name_ _ и варианты ее использования в Python


Скорее всего, вы встречали переменную __name__ при работе с кодом Python. Она выглядит следующим образом:

if __name__ == '__main__':
main()

Рассмотрим пример использования этой переменной при создании модулей в Python.

Зачем использовать переменную _ _name_ _?

Переменная __name__ (два нижних подчеркивания перед и после) — это особая переменная в Python, получающая значение в зависимости от того, каким образом выполняется содержащийся в ней сценарий.

Иногда функции в одних сценариях могут пригодиться вам в других. В Python можно импортировать этот сценарий в качестве модуля для другого сценария.

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

Какие значения может содержать переменная __name__?

При запуске сценария значение переменной __name__ равно __main__. При импортировании кода сценария она будет содержать название сценария.

Рассмотрим два случая использования.

Вариант 1 — Запуск сценария

Допустим, мы написали сценарий nameScript.py, который выглядит следующим образом:

def myFunction():
print 'The value of __name__ is ' + __name__

def main():
myFunction()

if __name__ == '__main__':
main()

При запуске nameScript.py последует нижеприведенный процесс.

До запуска остальной части кода значение переменной __name__ установлено на __main__. После этого запускаются утверждения def mainи myFunction. Поскольку установлено значение true, вызывается функция main. В свою очередь, вызывается myFunction. В результате выводится значение __main__.

Вариант 2 — Импорт сценария в другой сценарий

Чтобы использовать myFunction в другом сценарии, например importingScript.py, импортируем nameScript.py в качестве модуля.

Код importingScript.py выглядит следующим образом:

import nameScript as ns

ns.myFunction()

Получаем две области видимости: importingScript и nameScript.

В importingScript.py значение переменной __name__ установлено на __main__. При импортировании nameScript Python начинает искать файл, добавив .py к названию модуля, а затем запускает код импортированного файла.

В этом случае значение установлено на nameScript. Снова запускаются утверждения def для main и myFunction. Однако в этот раз установлено значение false, а функция main не вызывается.

В importingScript.py вызываем myFunction, которая выводит nameScript. NameScript становится известен для myFunction при определении функции.

При вводе __name__ в importingScript получаем __main__, поскольку Python использует значение, известное в области видимости importingScript.

Заключение

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


Перевод статьи Bert Carremans: What’s in a (Python’s) __name__?

Предыдущая статьяСтатистика - это грамматика науки о данных. Часть 1
Следующая статьяAndroid Networking в 2019 - Retrofit с Kotlin Coroutines