Що в __name__ (Python)?

Вступ до змінної _ _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__. Після цьогоmainта myFunctionвиконуються оператори def. Оскільки умова має значення true, викликається основна функція. Це, в свою чергу, називає myFunction. Це друкує значення __main__.

Сценарій 2 - Імпортуйте сценарій в інший сценарій

Наприклад, якщо ми хочемо повторно використовувати myFunction в іншому сценарії importingScript.py, ми можемо імпортувати nameScript.pyяк модуль.

Код importingScript.pyможе бути таким:

import nameScript as ns
ns.myFunction()

Тоді ми маємо два обсяги: один із importingScriptта другий обсяг nameScript. На ілюстрації ви побачите, чим вона відрізняється від першого варіанту використання.

У __name__importingScript.py для змінної встановлено __main__. Імпортуючи nameScript, Python починає шукати файл, додаючи .pyдо імені модуля. Потім він запускає код, що міститься в імпортованому файлі.

Але цього разу цевстановлено значення nameScript. Знову запускаються оператори def для main та myFunction. Але тепер умова оцінюється як хибне і основне не викликається.

У importingScript.py ми називаємо myFunction, який виводить nameScript. NameScript відомий myFunction, коли була визначена ця функція.

Якщо ви надрукуєте __name__на імпортуючому сценарії, це виведе результат __main__. Причиною цього є те, що Python використовує значення, відоме в області імпортуванняScript.

Висновок

У цій короткій статті я пояснив, як можна використовувати __name__змінну для написання модулів. Ви також можете запустити ці модулі самостійно. Це можна зробити, використовуючи те, як змінюються значення цих змінних залежно від того, де вони трапляються.