Какво има в __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. Но сега състоянието се оценява на false и main не се извиква.

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

Ако печатате __name__в импортиращия скрипт, това ще изведе __main__. Причината за това е, че Python използва стойността, известна в обхвата на importingScript.

Заключение

В тази кратка статия обясних как можете да използвате __name__променливата за писане на модули. Можете също така да стартирате тези модули сами. Това може да се направи, като се използва как се променят стойностите на тези променливи в зависимост от това къде се срещат.