Как разбить программу на Python на функции, как мне сделать ее основной функцией? - PullRequest
10 голосов
/ 24 января 2010

Это самый большой вопрос для новичка на планете, но я просто не уверен. Я написал несколько функций, которые выполняют какую-то задачу, и мне нужна «основная» функция, которая, например, когда я вызываю «someProgram.py», запускает function1, function2 и quit. Я смутно помню что-то про " main ", но понятия не имею.

Ответы [ 5 ]

12 голосов
/ 24 января 2010

Сценарии Python - это не наборы функций, а наборы операторов - определения функций и классов - это просто операторы, которые связывают имена с объектами функций или классов.

Если вы поместите оператор print в верхнюю или среднюю часть вашей программы, он будет работать нормально, без какой-либо функции. Это означает, что вы можете просто поместить весь основной код в конец файла, и он будет работать при запуске скрипта. Однако, если ваш скрипт импортируется, а не запускается напрямую, этот код также будет работать. Обычно это не то, чего вы хотите, поэтому вам следует избегать этого.

Python предоставляет глобальную переменную __name__, чтобы различать, когда скрипт импортируется и выполняется напрямую - ему присваивается имя, под которым он запускается. Если скрипт импортирован, это будет имя файла скрипта. Если он будет запущен напрямую, он будет "__main__". Таким образом, вы можете поместить if __name__ == '__main__': внизу вашей программы, и все, что в этом, если блок будет выполняться, только если скрипт запускается напрямую.

Пример.

if __name__ == "__main__":
    the_function_I_think_of_as_main()
3 голосов
/ 24 января 2010

Когда модуль python импортируется впервые, запускается его основной блок. Вы можете различить, запускается ли он сам и импортируется в другую программу:

if __name__ == "__main__":
    function1()
    function2()
else:
    # loaded from another module
2 голосов
/ 24 января 2010
if __name__ == '__main__':
  run_main()
1 голос
/ 24 января 2010

Когда я читаю ваш вопрос, вы спрашиваете, как определить основную функцию. Это на самом деле было бы сделано с чем-то вроде:

def main():
    function1()
    function2()
    return 0

И тогда вы поместите что-то вроде этого вне всех функций вашего основного файла:

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

(Конечно, вам нужно где-то импортировать sys для работы вышеупомянутого.)

A (сейчас довольно старый, но все еще актуальный) сообщение от Гвидо рассказывает больше.

1 голос
/ 24 января 2010

Это следующая идиома:

if __name__ == "__main__":
   yourfoo()

Также прочитайте это .

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