Python getopt () в __main__ - PullRequest
       9

Python getopt () в __main__

3 голосов
/ 18 декабря 2011

Я новичок в Python и успешно запустил мою первую программу с параметрами CLI.Получил много помощи от Опции командной строки для обработки .

Мой вопрос: почему в Примере 5.45 вместо вызова блока try/except внутри * был использован отдельный def main(argv)1007 * само по себе.

Пример 5.45

def main(argv):                         
    grammar = "kant.xml"
    try:                                
        opts, args = getopt.getopt(argv, "hg:d", ["help", "grammar="]) 2
    except getopt.GetoptError:
        usage()
        sys.exit(2)                     

...

if __name__ == "__main__":
    main(sys.argv[1:])

Надеюсь, что кто-то, разбирающийся в Python, сможет поделиться вашей мудростью.

TIA - Ashant

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011

Нет строгой технической причины, но довольно идиоматично держать код вне функций как можно более коротким.В частности, помещение кода в область видимости модуля превратит переменные grammar, opts и args в глобальные открытые переменные, даже если они требуются только внутри основного кода.Кроме того, использование специальной функции main упрощает модульное тестирование этой функции.

1 голос
/ 18 декабря 2011

Одним из преимуществ использования функции main является то, что она позволяет легко повторно использовать код:

import sys
import script

script.main(sys.argv[1:])
# or, e.g. script.main(['-v', 'file.txt']), etc

Любой код в блоке __main__ скрипта не будет выполняться, если он будет импортированкак модуль.Таким образом, функция main действует как простой интерфейс, предоставляющий доступ ко всем обычным функциям скрипта.Блок __main__ обычно будет содержать всего один вызов main плюс любой другой несущественный код (например, тесты).

Некоторые советы от автора Python о том, как написать хорошийmain функция может быть найдена здесь .

...