Python Эквивалент "public static void main"

Что такое эквивалент Python "public static void main (String [] args) {...}"? Я помню, что использовал его в прошлом, а потом забыл.

То, что я в основном пытаюсь запомнить, - это функция, которая, я думаю, включает некоторые подчеркивания (__)...

ТНХ

Ответы

Ответ 1

#!/usr/bin/env python

import sys

def main(args):
    print args

if __name__ == '__main__':
    main(sys.argv)

edit: эмулировать возврат void.

Ответ 2

if __name__ == "__main__":
    ....do your thing

Ответ 3

Это обычно используемая идиома, но она НЕ эквивалентна Java public static void main(String args[]). Все модули Python выполняют сверху вниз все заявления в области модуля. Для большинства импортированных модулей эти операторы обычно ограничиваются определениями классов и методов, которые устанавливают значения в пространстве имен модулей, но фактически не выполняют код функций. Но если вы поместите оператор в область модуля, например SPECIAL_CONSTANT = 42, то это будет выполняться немедленно, когда модуль будет импортирован или запущен автономно - нет необходимости в main() или __main__ или что-то еще. Попробуйте поставить оператор print в верхней части простого модуля. Если вы импортируете этот модуль или запускаете его самостоятельно из командной строки, оператор print всегда будет выполняться.

Что нравится в этой идиоме, так это то, что она позволяет встроить некоторые простые тесты или демонстрационный код прямо в библиотеку, которая обычно импортируется некоторым модулем, написанным вашим клиентом. Может быть, что-то вроде этого:

# special_super_duper_module.py

# this next statements will run, even though not in main() or set off
# with "__name__ ==" tests or any such thing
print "You are using special_super_duper_module.py, written by Felix the Cat"
SPECIAL_CONSTANT = 42

def super_duper_function1():
    pass

def super_duper_function2():
    pass

if __name__ == "__main__":
    print "You are running special_super_duper_module.py interactively"
    assert super_duper_function1() == None, "expected None, got non-None result"
    assert super_duper_function2() == None, "expected None, got non-None result"
    # doctests or unittests could also go here, or just a simple demo

Когда модуль импортируется с помощью некоторого кода, который хочет использовать функции супер-пупера, тогда маленький баннер в верхней части будет печатать, но код, который обусловлен if __name__ etc...., не будет запущен. Но если ваш пользователь запускает модуль напрямую с помощью команды python, тогда запускается встроенный тестовый или демонстрационный код.

Напротив, public static void main(String args[]) - это специальная сигнатура метода, которая сообщает Java VM, какой метод для чего начать. Python только начинается в верхней части именованного модуля и начинает работать оттуда. Вот почему вам нужно только написать:

print "Hello, World!"

в модуле само по себе написать свою первую программу Python.

Ответ 5

О!

if __name__ == '__main__':