Должен ли я запускать программу Python с помощью:
if__name__ == '__main__':
some code...
И если да, то почему? Я видел это много раз, но понятия не имею о нем.
Должен ли я запускать программу Python с помощью:
if__name__ == '__main__':
some code...
И если да, то почему? Я видел это много раз, но понятия не имею о нем.
Если ваша программа пригодна для использования в качестве библиотеки, но у вас также есть основная программа (например, для тестирования библиотеки), эта конструкция позволяет другим импортировать файл в виде библиотеки и не запускать основную программу. Если ваша программа называется foo.py, а вы "импортируете foo" из другого файла python, __name__
оценивается до 'foo'
, но если вы запустите "python foo.py" из командной строки, __name__
будет оцениваться как '__main__'
.
Обратите внимание, что вам нужно вставить пробел между if и _ и отступом основной программы:
if __name__ == '__main__':
main program here
Лучше всего это сделать:
def main():
...
if __name__ == '__main__':
main()
Это позволяет вызывать код для кого-то, кто его импортировал, а также для создания таких программ, как pychecker и pylint работа.
Гвидо Ван Россум предлагает:
def main(argv=None):
if argv is None:
argv = sys.argv
...
if __name__ == "__main__":
sys.exit(main())
Таким образом, вы можете запускать main()
из другого источника (поставляя аргументы), и если вы хотите выйти с кодом ошибки только return 1
из main()
, и он не сделает выход интерактивного интерпретатора ошибка.
Это хорошая практика. Во-первых, он четко указывает точку входа вашего модуля (при условии, что у вас нет другого исполняемого кода на верхнем уровне). Во-вторых, он делает ваш модуль доступным для других модулей без выполнения, что нужно сделать некоторым инструментам, таким как проверки кода, упаковщики и т.д.