Это самый большой вопрос новичков на планете, но я просто не уверен. Я написал несколько функций, которые выполняют некоторую задачу, и я хочу "главную" функцию, которая будет, например, когда я вызываю "someProgram.py", запускаю функцию1, функцию2 и завершаю. Я смутно помню что-то о " main", но я понятия не имею.
Разбирая программу python на функции, как сделать одну из основных функций?
Ответ 1
Сценарии Python - это не коллекции функций, а коллекции наборов операторов - определения функций и классов - это просто утверждения, которые связывают имена с функциями или объектами класса.
Если вы разместите оператор печати в верхней или средней части вашей программы, он будет работать нормально, не будучи в какой-либо функции. Это означает, что вы можете просто поместить весь основной код в конец файла, и он будет запускаться при запуске script. Однако, если ваш script когда-либо импортируется, а не запускается напрямую, этот код также запускается. Обычно это не то, что вы хотите, поэтому вы бы хотели этого избежать.
Python предоставляет глобальную переменную __name__
для дифференциации при импортировании и запуске script - она задается именем, под которым запускается script. Если импортируется script, это будет имя файла script. Если он запущен напрямую, это будет "__main__"
. Таким образом, вы можете поместить if __name__ == '__main__':
в нижней части своей программы, и все внутри этого блока if будет выполняться, только если script запускается напрямую.
Пример.
if __name__ == "__main__":
the_function_I_think_of_as_main()
Ответ 2
Когда модуль python импортируется в первый раз, его основной блок запускается. Вы можете отличить себя от запуска и импортировать в другую программу:
if __name__ == "__main__":
function1()
function2()
else:
# loaded from another module
Ответ 3
if __name__ == '__main__':
run_main()
Ответ 4
Это следующая идиома:
if __name__ == "__main__":
yourfoo()
Ответ 5
Когда я прочитаю ваш вопрос, вы спрашиваете, как определить основную функцию. Это действительно было бы сделано с чем-то вроде:
def main():
function1()
function2()
return 0
И тогда вы поставили бы что-то вроде этого вне всех ваших основных функций:
if __name__ == "__main__":
sys.exit(main())
(Конечно, вам нужно импортировать sys где-то, чтобы выше работало.)
A (теперь старый, но по-прежнему актуальный) сообщение из Guido рассказывает больше.