Думайте, что заголовок суммирует вопрос :-)
Сценарий обычно представляет собой непосредственно исполняемый фрагмент кода, запускаемый сам по себе. Модуль обычно представляет собой библиотеку, импортируемую другими частями кода.
Обратите внимание, что нет внутреннего различия - оба являются исполняемыми и импортируемыми, хотя код библиотеки часто ничего не делает (или просто запускает свои модульные тесты) при прямом выполнении и импорте кода, предназначенного для сценарий вызовет его выполнение, отсюда общий тест if __name__ == "__main __"
.
Любой модуль Python может выполняться как сценарий. Единственное существенное отличие состоит в том, что при импорте в виде модуля имя файла используется в качестве основы для имени модуля, тогда как если вы выполняете его как сценарий, модуль получает имя __ main __
.
Это различие позволяет иметь другое поведение при импорте путем включения кода, специфичного для сценария, в блок, охраняемый if __name __ == "__ main __"
. Известно, что это вызывает путаницу, когда пользователь пытается импортировать основной модуль под своим собственным именем, а не импортировать __ main __
.
Незначительное различие между скриптами и модулями заключается в том, что при импорте модуля система попытается использовать существующий файл .pyc (при условии, что он существует и обновлен для этой версии Python), и если он должен компилироваться из файла .py он попытается сохранить файл .pyc. Когда вы запускаете файл .py как сценарий, он не пытается загрузить ранее скомпилированный модуль и не пытается сохранить скомпилированный код. По этой причине, возможно, стоит сохранять скрипты небольшого размера, чтобы минимизировать время запуска.