Python: prefieres varios módulos pequeños o un módulo más grande?

Estoy trabajando en una aplicación web de Python en la que tengo algunos módulos pequeños que cumplen funciones muy específicas: logger.py , logger.py , database.py , etc. Y por “pequeño” realmente quiero decir pequeño; cada uno de estos archivos actualmente incluye alrededor de 3-5 líneas de código, o tal vez hasta 10 como máximo. Podría tener algunas importaciones y una definición de clase o dos en cada uno. Me pregunto, ¿hay alguna razón por la que deba o no deba fusionarlas en un módulo, algo como misc.py ?

Mi opinión es que tener módulos separados ayuda con la claridad del código, y más adelante, si por casualidad estos módulos crecen a más de 10 líneas, no me sentiré tan mal por tenerlos separados. Pero por otro lado, ¡parece un desperdicio tener un montón de archivos con solo unas pocas líneas en cada uno! ¿Y hay alguna diferencia significativa en el uso de recursos entre el enfoque de archivos múltiples frente a los archivos únicos? (Por supuesto que no estoy ni cerca del punto en el que debería preocuparme por el uso de recursos, pero no pude resistirme a preguntar …)

Revisé alrededor para ver si esto había sido preguntado antes y no vi nada específico de Python, pero si de hecho es un duplicado, agradecería ser apuntado en la dirección correcta.

Mi opinión es que tener módulos separados ayuda con la claridad del código, y más adelante, si por casualidad estos módulos crecen a más de 10 líneas, no me sentiré tan mal por tenerlos separados.

Esta. Mantenlo como lo tienes.

Como usuario de módulos, prefiero mucho cuando puedo incluir todo el módulo a través de una sola importación. No haga que un usuario de su paquete realice múltiples importaciones a menos que haya alguna razón para permitir la importación de diferentes alternativas.

Por cierto, no hay razón para que un solo módulo no pueda consistir en múltiples archivos de origen. El caso más simple es usar un archivo __init__.py para simplemente cargar todo el otro código en el espacio de nombres del módulo.

Personalmente, me resulta más fácil mantener este tipo de cosas en un solo archivo, solo por la practicidad de editar un número menor de archivos en mi editor.

Lo importante es tratar los diferentes fragmentos de código como si estuvieran en archivos separados, de modo que pueda asegurarse de que pueda separarlos de forma trivial más adelante, por las razones que cita. Entonces, por ejemplo, no introduzca dependencias entre las diferentes piezas que harán que sea difícil desenredarlas más adelante.

Para los guiones de línea de comando, probablemente no habrá mucha diferencia a menos que cada invocación invoque todos los archivos en el módulo, en cuyo caso habrá un ligero costo de rendimiento, ya que es necesario abrir n archivos frente a uno.

Para mod_python, lo más probable es que no haya diferencia, ya que los módulos comstackdos por bytes permanecen activos durante la duración del proceso de apache.

Para el motor de aplicaciones de Google, habrá un impacto en el rendimiento a menos que el servicio se use constantemente y esté “caliente”, ya que cada inicio en frío requeriría abrir todos los archivos.

Por supuesto puedes tener tantos módulos como quieras.

Pero ahora piensen un poco, qué sucede cuando colocamos cada pequeño fragmento de código en un solo archivo.

Terminaremos en cientos de declaraciones de importación en cualquier módulo menos trivial. Y, por supuesto, también puede ahorrar un poco al tener todo explícito en archivos separados. Pero adivina qué: nadie puede recordar tantos nombres de módulos y, de todos modos, podrías terminar buscando el archivo correcto …

Intento poner las cosas que pertenecen en un solo archivo (¡a menos que se haga demasiado grande!). Pero cuando tengo pequeñas funciones o clases que no pertenecen a otros componentes en mi sistema, tengo módulos “util” o similares. También trato de agruparlos, por ejemplo, de acuerdo con mi aplicación de capas o separarlos por otros medios. Un criterio de separación podría ser: Utilidades que se utilizan para la IU y aquellas que no lo son.

Pequeña.