Въведение в променливата _ _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. Но сега състоянието се оценява на false и main не се извиква.
В importingScript.py извикваме myFunction, който извежда nameScript. NameScript е известен на myFunction, когато тази функция е дефинирана.
Ако печатате __name__
в импортиращия скрипт, това ще изведе __main__
. Причината за това е, че Python използва стойността, известна в обхвата на importingScript.
Заключение
В тази кратка статия обясних как можете да използвате __name__
променливата за писане на модули. Можете също така да стартирате тези модули сами. Това може да се направи, като се използва как се променят стойностите на тези променливи в зависимост от това къде се срещат.