В этом руководстве мы узнаем, как использовать атрибут __name__ программы Python для ее динамического запуска в разных контекстах.
Что такое функция main () в 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__.
Использование условного if с __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.