Запуск программы Python - PullRequest
       22

Запуск программы Python

18 голосов
/ 13 ноября 2008

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

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

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

Ответы [ 4 ]

29 голосов
/ 13 ноября 2008

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

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

if __name__ == '__main__':
    main program here
23 голосов
/ 13 ноября 2008

Лучшая картина такова:

def main():
   ...

if __name__ == '__main__':
   main()

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

20 голосов
/ 13 ноября 2008

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

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

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

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

3 голосов
/ 13 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...