Все остальные уже ответили на это, но я думаю, что мне еще есть что добавить.
Причины, чтобы иметь что if
заявление вызова main()
(в произвольном порядке):
Другие языки (например, C и Java) имеют main()
функцию, которая вызывается, когда программа выполняется. Используя этот if
, мы можем заставить Python вести себя как они, что кажется более знакомым для многих людей.
Код будет очиститель, легче читать и лучше организовывать. (да, я знаю, это субъективно)
Это может быть import
, что код python как модуль без неприятных побочных эффектов.
Это означает, что можно будет выполнить тесты против этого кода.
Это означает, что мы можем импортировать этот код в интерактивную оболочку python и тестировать/отлаживать/запускать его.
Переменные внутри def main
являются местного, в то время как за его пределами являются глобальной. Это может привести к нескольким ошибкам и неожиданному поведению.
Но вы не требуется написать main()
функцию и вызвать ее внутри if
заявление.
Я сам обычно начинаю писать небольшие сценарии с отбрасыванием без какой-либо функции. Если сценарий становится достаточно большим, или если я чувствую, что всякий код внутри функции мне пригодится, то я реорганизую код и делаю это. Это также происходит, когда я пишу сценарии bash
.
Даже если вы помещаете код в основную функцию, вам не нужно писать его точно так же. Аккуратная вариация может быть:
import sys
def main(argv):
# My code here
pass
if __name__ == "__main__":
main(sys.argv)
Это означает, что вы можете вызвать main()
из других сценариев (или интерактивной оболочки), проходящих пользовательских параметров. Это может быть полезно в модульных тестах или при пакетной обработке. Но помните, что в приведенном выше коде потребуется разбор argv, поэтому, возможно, было бы лучше использовать другой вызов, который уже анализирует параметры.
В объектно-ориентированном приложении я написал, код выглядит следующим образом:
class MyApplication(something):
# My code here
if __name__ == "__main__":
app = MyApplication()
app.run()
Таким образом, не стесняйтесь писать код, который лучше подходит для вас. :)
См. Http://stackoverflow.com/questions/419163/what-does-if-name-main-do – gimel
stackoverflow.com/questions/419163/what-does-if-name-main-do делает не отвечайте на весь вопрос. – Johnsyweb
То, что предполагаемый дубликат не отвечает: функция main() (а не просто запись всего кода в блок «if __name__») полезна, поскольку она позволяет избежать случайного создания глобальных переменных, которые могут повлиять на другие функции. – slowdog