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

Python: предпочитаете несколько небольших модулей или один более крупный модуль?

Я работаю над веб-приложением Python, в котором у меня есть небольшие модули, которые обслуживают очень специфические функции: session.py, logger.py, database.py и т.д. И "маленьким" я действительно мало что имею; каждый из этих файлов в настоящее время включает в себя около 3-5 строк кода или, возможно, не более 10. У меня может быть несколько импорта и определение класса или по два в каждом. Мне интересно, есть ли какая-то причина, по которой я должен или не должен объединять их в один модуль, что-то вроде misc.py?

Мои мысли заключаются в том, что наличие отдельных модулей помогает с ясностью кода, а позже, если по каким-то причинам эти модули вырастут до более чем 10 строк, я не буду так плохо относиться к их разделению. Но, с другой стороны, просто кажется, что такая трата будет иметь кучу файлов с несколькими строчками в каждом! И есть ли существенная разница в использовании ресурсов между многофайловым и однопользовательским подходом? (Конечно, я нигде не приближаюсь к точке, где я должен беспокоиться об использовании ресурсов, но я не мог удержаться от просьбы...)

Я проверил, чтобы узнать, было ли это задано раньше, и не видел ничего конкретного для Python, но если это на самом деле дубликат, я был бы признателен за то, что он указал в правильном направлении.

4b9b3361

Ответ 1

Мои мысли заключаются в том, что отдельные модули помогают с ясностью кода и позже, если они случайно модули растут до более чем 10 строк, я не будет так плохо о том, чтобы их разделены.

Это. Держи это так, как ты.

Ответ 2

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

Кстати, нет причин, чтобы отдельные модули не состояли из нескольких исходных файлов. Самый простой случай - использовать файл __ init__.py, чтобы просто загрузить весь другой код в пространство имен модулей.

Ответ 3

Лично мне легче хранить такие вещи в одном файле, просто для практичности редактирования меньшего количества файлов в моем редакторе.

Важная вещь - относиться к различным фрагментам кода, как если бы они были в отдельных файлах, поэтому вы гарантируете, что вы можете тривиально отделить их позже, по причинам, которые вы приводите. Так, например, не вводите зависимости между разными частями, которые затруднят их распутывание позже.

Ответ 4

Для сценариев командной строки там, скорее всего, не будет большой разницы, если каждый вызов не вызывает все файлы в модуле, и в этом случае будет небольшая стоимость исполнения, так как n файлов необходимо открыть против одного.

Для mod_python, скорее всего, не будет никакой разницы, так как модули, базирующиеся на байтах, остаются в живых в течение всего процесса apache.

Для движка Google-движка, хотя будет производительный удар, если служба не будет постоянно использоваться и будет "горячей", так как каждый холодный старт потребует открытия всех файлов.

Ответ 5

Конечно, у вас может быть столько модулей, сколько захотите.

Но теперь давайте немного подумаем, что происходит, когда мы помещаем каждый маленький фрагмент кода в один файл.

Мы получим сотни операторов импорта в любом менее тривиальном модуле. И, конечно же, вы также можете немного сэкономить, имея все явные в отдельных файлах. Но угадайте, что: Никто не может запомнить столько имен модулей, и вы все равно можете найти нужный файл...

Я пытаюсь поместить вещи, которые принадлежат друг другу в одном файле (если только он не станет большим!). Но когда у меня есть небольшие функции или классы, которые не принадлежат к другим компонентам в моей системе, у меня есть "использовать" модули или тому подобное. Я также пытаюсь сгруппировать их, например, в соответствии с моими приложениями или разделять их другими способами. Один критерий разделения может быть: Утилиты, которые используются для пользовательского интерфейса, и те, которые не являются.

Ответ 6

Малый.