Diferencia entre Scripts y Módulos de Python – python script

Pregunta:


He visto que los módulos se guardan .py exactamente igual que los scripts y su contenido son lineas de código ejecutable, querría saber cuál es la diferencia.

Gracias!

Preguntado por: Melissa Alvarez

abulafia

No hay diferencia salvo en la forma en que se usan.

Cuando desde un script python haces un:

import modulo

ocurren varias cosas:

  • Python busca el fichero llamado modulo.py, primero en la misma carpeta en que estaba el script y si no está ahí, en otra serie de carpetas que tiene predefinidas (pero que se pueden configurar). La historia completa es demasiado larga para ponerla aqui.
  • Crea un «espacio de nombres» llamado modulo.
  • Carga y ejecuta modulo.py. Todo el código contenga ese fichero será ejecutado. Normalmente el código en cuestión suele consistir sólo en definir clases, variables y funciones, por lo que lo único que se ejecuta en realidad es la definición de esos identificadores. Todos ellos aparecerán en el espacio de nombres modulo. Si por ejemplo dentro de modulo.py se define una función llamada ejemplo(), el script podrá invocarla llamando a modulo.ejemplo().

    Si el módulo además de definir cosas incluye sentencias, por ejemplo al final del mismo podría tener el comando print("Módulo cargado!"), esas sentencias se ejecutan también.

El módulo se carga una sola vez. Si más adelante aparece de nuevo import modulo no se ejecuta de nuevo el fichero en cuestión.

El mismo módulo podrías ejecutarlo desde línea de comandos haciendo:

$ python modulo.py

Y lo que ocurre es lo mismo que cuando lo importas. Es decir, se ejecutan las líneas que haya en él, si bien lo normal es que sólo sean definiciones y por tanto no haya ningún resultado visible. Pero si contenía como en el ejemplo anterior un print() al final, entonces sí se vería algo.

Además de lo anterior, Python define una variable llamada __name__ dentro del módulo. El valor de esa variable sirve para diferenciar si el módulo ha sido importado (en cuyo caso la variable es una cadena con el nombre del módulo, por ejemplo "modulo"), o si ha sido ejecutado «directamente» como script, en cuyo caso la variable es una cadena con el valor "__main__".

Es por eso que muchos scripts python tienen la siguiente estructura:

# Modulo X

def funcion_tal():
   ...

def funcion_cual():
   ...

if __name__ == "__main__":
   funcion_tal()

De este modo, si el fichero es invocado desde python se ejecutará el código contenido en el if __name__ ..., pero si es importado desde otro módulo ese código no se ejecuta. Así se permite un script que tenga una funcionalidad por sí solo, pero que también pueda usarse desde otro, para acceder a sus funciones sin ejecutar esa funcionalidad autónoma, para usarlas quizás en otra forma.

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *