English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы будем учиться использовать атрибут __name__ программы Python для динамического выполнения ее в различных контекстах.
Некоторые языки программирования имеют особую функцию main(), которая является точкой выполнения файла программы. Однако, интерпретатор Python запускает каждую строку файла по порядку с начала файла и не имеет явной функции main().
Python предоставляет другие договоренности для определения точки выполнения. Одна из них — использование функции main() файла Python и атрибута __name__.
Переменная __name__ — это особая встроенная переменная Python, которая显示了 текущее имя модуля.
В зависимости от места выполнения Python-файла, у него может быть разное значение. Давайте посмотрим на пример.
Предположим, что у нас есть файл с именемhelloworld.pyСодержимое Python-файла, например:
print(__name__)
Если мы запускаем из командной строкиhelloworld.pyЕсли это так, то он будет запущен как скрипт Python. Мы можем запустить Python-программу с помощью следующих команд:
python helloworld.py
def foo(): str="__main__" print(str); if __name__ == "__main__": foo()
Когда мы запускаем программу как скрипт, значение переменной __name__ установлено в__main__. Поэтому следующий вывод программы будет следующим:
__main__
Мы также можем запускать Python файл как модуль. Для этого我们必须 импортировать этот файл в другой Python программу. Давайте рассмотрим пример.
Предположим, что у нас есть файлmain.pyPython файла. Он содержит следующее:
import helloworld
Когда мы запускаем этот файл, мы получим следующий вывод:
helloworld
Здесь мы можем видеть, что импорт модуля также запускает все код в файле модуля.
Но мы можем видеть, что вместо отображения __main__программа будет отображать имя модуля, то есть helloworld.
Это потому, что при запуске Python файла как модуля имя модуля уже assigned к переменной __name__.
Теперь, когда мы знаем, как переменная __name__ assigns значения, мы можем использовать условные предложения if в различных контекстах, чтобы запускать один и тот же файл Python по-разному.
Давайте рассмотрим пример.
Предположим, что у нас естьhelloworld.pyСодержимое файла изменяется следующим образом:
def main(): print("Hello World") if __name__ == "__main__": main()
Теперь, когда мы запускаем его как скрипт через командную строку, вывод будет следующим:
Hello World
Но когда мы импортируемmain.pyКогда файл запускается как модуль, и функция main() не вызывается, не будет отображаться никакого вывода.
Здесь мы создаем пользовательскую функцию main() в файле helloworld.py. Она выполняется только когда программа запущена как независимый скрипт, а не как импортируемый модуль.
Это стандартный метод явного определения функции main() в Python. Это один из самых популярных примеров использования переменной __name__ файла Python.