Подтвердить что ты не робот

Должен ли я использовать метод main() в простом Python script?

У меня много простых скриптов, которые вычисляют некоторые вещи или около того. Они состоят всего из одного модуля.

Должен ли я писать основные методы для них и вызывать их с конструкцией if __name__ или просто сбрасывать все это прямо там?

В чем преимущества любого метода?

4b9b3361

Ответ 1

Хорошо, если вы это сделаете:

# your code

Затем import your_module выполнит ваш код. Наоборот, с этим:

if __name__ == '__main__':
    # your code

Импорт не будет запускать код, но таргетинг на интерпретатор в этом файле будет.

Если единственный способ запускать script - это открытие ручного интерпретатора, нет никакой разницы.

Это становится важным, когда у вас есть библиотека (или повторное использование определений в script).

  • Добавление кода в библиотеку вне определения или вне защиты if __name__ запускает код при импорте, позволяя вам инициализировать материал, который требуется библиотеке.

  • Возможно, вы хотите, чтобы ваша библиотека также имела некоторые функциональные возможности. Может быть, тестирование или, может быть, что-то вроде Python SimpleHTTPServer (он поставляется с некоторыми классами, но вы также можете запустить модуль, и он запустит сервер). Вы можете иметь это двойное поведение с предложением if __name__.

  • Инструменты, такие как epydoc импортируют модуль для доступа к docstrings, поэтому запуск кода, когда вы просто хотите генерировать HTML-документацию, на самом деле не является целью.

Ответ 2

Я всегда пишу функцию main() (соответствующим образом названную) и не помещаю ничего, кроме синтаксического анализа командной строки, и вызов main() в блоке if __name__ == '__main__'. Это потому, что независимо от того, насколько глупый, тривиальный или одноцелевой я изначально ожидал, что script будет, я всегда получаю желание вызвать его из другого модуля в более позднюю дату.

Либо я трачу время, чтобы сделать его импортным модулем сегодня, либо потратить дополнительное время, чтобы реорганизовать его несколько месяцев спустя, когда я хочу его повторно использовать для чего-то еще.

Всегда.

Каждый раз.

Я прекратил бороться с ним и начал писать код с этим ожиданием с самого начала.

Ответ 3

Другие ответы хороши, но я хотел добавить пример того, почему вы, возможно, захотите его импортировать: модульное тестирование. Если у вас есть несколько функций, а затем if __name__=="__main__":, вы можете импортировать модуль для модульного тестирования. Возможно, вам лучше, чем мне, но я обнаружил, что мои "простые сценарии, которые не могут иметь никаких ошибок", как правило, имеют ошибки, которые я нахожу при модульном тестировании.

Ответ 4

Конструкция if __name__ позволит вам легко повторно использовать функции и классы в модуле в других сценариях Python. Если вы этого не сделаете, тогда все в модуле будет работать, когда оно import ed.

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