Начало программы Python

Должен ли я запускать программу Python с помощью:

if__name__ == '__main__':
some code...

И если да, то почему? Я видел это много раз, но понятия не имею о нем.

Ответ 1

Если ваша программа пригодна для использования в качестве библиотеки, но у вас также есть основная программа (например, для тестирования библиотеки), эта конструкция позволяет другим импортировать файл в виде библиотеки и не запускать основную программу. Если ваша программа называется foo.py, а вы "импортируете foo" из другого файла python, __name__ оценивается до 'foo', но если вы запустите "python foo.py" из командной строки, __name__ будет оцениваться как '__main__'.

Обратите внимание, что вам нужно вставить пробел между if и _ и отступом основной программы:

if __name__ == '__main__':
    main program here

Ответ 2

Лучше всего это сделать:

def main():
   ...

if __name__ == '__main__':
   main()

Это позволяет вызывать код для кого-то, кто его импортировал, а также для создания таких программ, как pychecker и pylint работа.

Ответ 3

Гвидо Ван Россум предлагает:

def main(argv=None):
  if argv is None:
    argv = sys.argv
  ...

if __name__ == "__main__":
    sys.exit(main())

Таким образом, вы можете запускать main() из другого источника (поставляя аргументы), и если вы хотите выйти с кодом ошибки только return 1 из main(), и он не сделает выход интерактивного интерпретатора ошибка.

Ответ 4

Это хорошая практика. Во-первых, он четко указывает точку входа вашего модуля (при условии, что у вас нет другого исполняемого кода на верхнем уровне). Во-вторых, он делает ваш модуль доступным для других модулей без выполнения, что нужно сделать некоторым инструментам, таким как проверки кода, упаковщики и т.д.