Переменная __name__ в Python — значения и примеры

В этом руководстве вы узнаете о переменной Python __name__, ее значениях и о том, как эффективно использовать ее в модулях.

Что такое Python __name__?

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

if __name__ == '__main__':
    main()

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

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

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

Когда вы запускаете скрипт напрямую, Python устанавливает для переменной __name__ значение «__main__». Однако если вы импортируете файл как модуль, Python присваивает имя модуля переменной __name__.

Пример переменной __name__

Сначала создайте новый модуль под названием Billing, который имеет две функции: Calculate_tax() и print_billing_doc(). Кроме того, добавьте оператор, который выводит на экран переменную __name__:

def calculate_tax(price, tax):
    return price * tax


def print_billing_doc():
    tax_rate = 0.1
    products = [{'name': 'Book',  'price': 30},
                {'name': 'Pen', 'price': 5}]

    # print billing header
    print(f'Name\tPrice\tTax')

    # print the billing item
    for product in products:
        tax = calculate_tax(product['price'], tax_rate)
        print(f"{product['name']}\t{product['price']}\t{tax}")


print(__name__)

Во-вторых, создайте новый файл с именем app.py и импортируйте модуль Billing:

import billing

Когда вы выполняете app.py:

> python app.py

…переменная __name__ имеет следующее значение:

billing

Это означает, что Python выполняет файл billing.py, когда вы импортируете модуль Billing в файл app.py.

Переменная __name__ в app.py имеет имя модуля billing.

Если вы запускаете billing.py напрямую как скрипт:

> python billing.py

… вы увидите следующий результат:

__main__

В этом случае значение переменной __name__ внутри файла billing.py равно «__main__».

Значения переменной __name__ в Python

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

Например, чтобы выполнить функцию print_billing_doc(), когда billing.py выполняется непосредственно как скрипт, вы можете добавить в модуль billing.py следующий оператор:

if __name__ == '__main__':
    print_billing_doc()

В-третьих, запустите billing.py как скрипт, вы увидите следующий результат:

Name    Price   Tax
Book    30      3.0
Pen     5       0.5

Однако при выполнении app.py вы не увидите выполненный блок if, поскольку для переменной __name__ установлено не значение «__main__», а значение «Billing».

Похожие посты
Добавить комментарий

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