Переменная __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__ позволяет вам проверить, когда файл выполняется напрямую или импортируется как модуль.
Например, чтобы выполнить функцию 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».