Manejo de la dualidad de módulos en Python: script y módulo
Curso de Python: Comprehensions, Funciones y Manejo de Errores
Contenido del curso
Conjuntos
Comprehensions
- 6

List Comprehension en Python: Sintaxis y Ejemplos Prácticos
08:44 min - 7

Comprensión de Diccionarios en Python: Ejemplos y Aplicaciones
11:57 min - 8

Dictionary Comprehension con Condicionales en Python
07:33 min - 9

Playgrounds: Crea una lista usando List Comprehension
- 10

Comparación de Listas, Tuplas y Conjuntos en Python
02:44 min
Funciones
- 11

Funciones en Programación: Creación y Uso en Python
09:47 min - 12

Funciones en Python: Retorno de Valores y Reutilización de Código
10:03 min - 13

Funciones en Python: Retorno múltiple y valores por defecto
06:30 min - 14

Entendiendo el Scope en Python: Variables y Funciones
07:54 min - 15

Refactorización de Juegos en Python: Uso de Funciones
15:10 min - 16

Playgrounds: Tienda de Tecnología
- 17

Funciones Lambda en Python: Sintaxis y Aplicaciones Prácticas
06:39 min - 18

Funciones de Orden Superior en Python: Concepto y Ejemplos Prácticos
08:48 min - 19

Uso de la función map en Python para transformar listas
08:43 min - 20

Transformaciones con Map en Diccionarios Complexos
09:56 min - 21

Manejo de referencias en memoria con diccionarios y map en Python
04:12 min - 22

Playgrounds: Multiplica todos los elementos por dos
- 23

Filtrado de listas con Filter en Python
09:19 min - 24

Playgrounds: Retorna solo palabras de 4 letras y más
- 25

Uso de Reduce en Python para Manipular Listas
07:45 min
Módulos
Manipulación de archivos y errores
- 31

Control manual de iteradores en Python con next
06:33 min - 32

Errores y Excepciones en Python: Identificación y Manejo Básico
08:28 min - 33

Manejo de Errores en Python: Uso de Try y Except
08:17 min - 34

Playgrounds: Captura la excepción: ZeroDivisionError
- 35

Lectura y manejo de archivos de texto en Python
06:52 min - 36

Lectura y escritura de archivos de texto en Python
06:11 min - 37

Procesamiento de Archivos CSV en Python para Análisis de Datos
15:49 min - 38

Playgrounds: Lee un CSV para calcular el total de gastos
Gráficas en Python
Próximos pasos
Manejo de la dualidad de módulos en Python: script y módulo
Resumen
Cuando trabajas con archivos Python, es común querer que un mismo archivo funcione tanto como módulo importable desde otro archivo como script ejecutable directamente desde la terminal. Esta dualidad puede generar comportamientos inesperados si no se controla correctamente, y la solución está en una línea que encontrarás en prácticamente todos los proyectos profesionales de Python.
¿Cuál es el problema de la dualidad entre módulos y scripts?
Un archivo .py en Python puede ejecutarse de dos formas. La primera es como módulo, donde defines funciones y las importas desde otro archivo. Por ejemplo, un archivo utils.py con funciones que se importan desde main.py [0:18]. La segunda es como script, ejecutándolo directamente desde la terminal con el comando python seguido de la ruta del archivo [0:40].
El conflicto aparece cuando importas un archivo que contiene código ejecutable fuera de funciones. Al hacer import main desde un archivo example.py, todo el código de main.py se ejecuta automáticamente [2:07]. Esto significa que si main.py tiene un input() o cualquier lógica directa, se disparará sin que lo desees.
¿Cómo evitar que un módulo se ejecute al importarlo?
La primera estrategia es encapsular el código dentro de una función. En lugar de tener instrucciones sueltas en el archivo, creas una función llamada run() y colocas toda la lógica dentro de su scope o alcance [3:08].
python def run(): country = input('Escribe un país: ') # lógica del programa
De esta manera, al importar el módulo desde otro archivo, el código no se ejecuta automáticamente. Solo se ejecuta cuando llamas explícitamente a main.run() [3:30].
- El código queda protegido dentro de la función.
- La ejecución se controla de forma explícita.
- Las variables definidas fuera de la función, como
data, siguen siendo accesibles mediantemain.data[4:05].
¿Qué hace if name == "main" y por qué es esencial?
Al encapsular todo en una función run(), resuelves el problema de la importación. Pero ahora pierdes la capacidad de ejecutar el archivo directamente como script, porque nadie llama a run() cuando lo ejecutas desde la terminal [4:50].
Aquí entra el patrón más importante de Python para manejar esta dualidad. Se trata de un condicional que evalúa la variable especial __name__ [5:30]:
python if name == "main": run()
Esta variable __name__ es una propiedad interna que Python asigna automáticamente a cada archivo. Cuando ejecutas un archivo directamente desde la terminal, Python le asigna el valor "__main__". Cuando el archivo es importado desde otro módulo, __name__ toma el nombre del archivo.
¿Cómo funciona en la práctica este condicional?
El comportamiento resultante es exactamente la dualidad controlada que necesitas:
- Si ejecutas
python app/main.pydesde la terminal, el condicional se cumple yrun()se ejecuta [6:22]. - Si importas
maindesdeexample.py, el bloqueifno se ejecuta, y solo corres lo que llames explícitamente comomain.run()[6:05].
python data = [1, 2, 3]
def run(): country = input('Escribe un país: ') # lógica del programa
if name == "main": run()
Sin este if, perderías la posibilidad de que el archivo funcione como script independiente [6:42]. Con él, tienes un archivo que sirve como módulo reutilizable y como punto de entrada directo.
¿Por qué la modularización importa en proyectos Python?
La modularización consiste en organizar el código en archivos separados con responsabilidades claras. Cada archivo .py es considerado un módulo, incluso main.py [1:20]. Esto permite reutilizar funciones sin duplicar código.
El patrón if __name__ == "__main__" es una pregunta frecuente en entrevistas y una práctica estándar en proyectos profesionales [6:55]. Dominarlo te permite escribir código que es tanto importable como ejecutable, algo fundamental cuando tus proyectos crecen y necesitas trabajar con paquetes, el siguiente paso natural en la organización de código Python.
¿Has encontrado errores al importar módulos que se ejecutaban sin querer? Comparte tu experiencia y cómo lo resolviste.