В този урок ще научим как да използваме атрибута __name__ на програма на Python, за да го изпълняваме динамично в различни контексти.
Каква е основната () функция в Python?
Някои програмни езици имат специална функция, наречена main()
която е точката на изпълнение на програмен файл. Интерпретаторът на Python обаче изпълнява всеки ред последователно от горната част на файла и няма изрична main()
функция.
Python предлага други конвенции за определяне на точката на изпълнение. Един от тях използва main()
функцията и свойството __name__ на файл на python.
Какво е __name__ в Python?
Променливата __name__ е специална вградена променлива на Python, която показва името на текущия модул.
Той има различни стойности в зависимост от това къде изпълняваме файла Python. Нека разгледаме един пример.
Изпълнение на Python файл като скрипт
Да предположим, че имаме файл на Python, наречен helloworld.py със следното съдържание:
print(__name__)
Ако стартираме helloworld.py от командния ред, тогава той работи като скрипт на Python. Можем да стартираме програмата Python, като използваме следната команда:
$ python helloworld.py
Когато стартираме програмата като скрипт, стойността на променливата __name__ е зададена на __main__. Така че резултатът от следната програма ще бъде:
__основен__
Изпълнение на Python файл като модул
Също така можем да стартираме Python файл като модул. За това трябва да импортираме този файл в друга програма на Python. Нека разгледаме един пример.
Да предположим, че имаме файл на Python, наречен main.py, в същата директория като файла heloworld.py. Той има следното съдържание:
import helloworld
Когато стартираме този файл, ще имаме следния изход:
Здравей свят
Тук можем да видим, че импортирането на модул също изпълнява целия код във файла на модула.
Но можем да видим, че вместо да показва __main__, програмата показва името на модула, т.е. helloworld.
Това е така, защото в контекста на изпълнението на Python файл като модул, името на самия модул се присвоява на променливата __name__.
Използване, ако е условно с __name__
Сега, след като разбрахме как на променливата __name__ се присвояват стойности, можем да използваме if
условната клауза, за да стартираме един и същ файл на Python по различен начин в различни контексти.
Нека разгледаме един пример.
Да предположим, че променяме съдържанието на файла helloworld.py на следното:
def main(): print("Hello World") if __name__=="__main__": main()
Сега, когато го стартираме като скрипт чрез командния ред, изходът ще бъде:
Здравей свят
Когато обаче го стартираме като модул, като го импортираме във файла main.py , не се показва изход, тъй като main()
функцията не се извиква.
Тук създадохме персонализирана main()
функция във файла helloworld.py . Изпълнява се само когато програмата се изпълнява като самостоятелен скрипт, а не като импортиран модул.
Това е стандартният начин за изрично дефиниране на main()
функцията в Python. Това е един от най-популярните случаи на използване на променлива __name__ на файл на Python.