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

Related Posts:

Con Django ‘str’ object is not callable en class based-views – python django
Pregunta: Tengo este problema cuando quiero acceder a una URL que me dice que es str object is no callable seguramente tengo algo mal en ...
Abrir páginas web en python 3.5.X en la misma ventana – python python-3.x webbrowser
Pregunta: Buenas, he hecho un script para lanzar varias páginas web en una sola ventana, es decir, cada url en una pestaña sin embargo, firefox ...
Publicar proyecto en Python 3.5 con heroku – python django python-3.x
Pregunta: Hola tengo un proyecto hecho con Python 3.5 y Django 1.10 y quisiera publicarlo en HEROKU pero veo que solo soporta Python 2.7, ¿alguien ...
Correcto uso de la app admin de django – python django
Pregunta: Cual es el correcto uso que se le debe dar a la página de administración (django.contrib.admin) en una aplicación en producción. explico mi pregunta. El ...
Cambiar un valor string a un entero – python django ajax
Pregunta: Con el siguiente código quiero hacer una validación donde valide si un dato que voy a ingresar es mayor a otro que ya tengo, ...
Como correr Django en python 3.5 – python python-3.x django
Pregunta: estoy trabajando con Django en python 2.7, para eso hago uso de virtualenv, pip, el conector de mysql, etc. Tengo predefinido python 3.5 en ...
Insertar salto de línea escribiendo en un txt (Python) – python tkinter
Pregunta: Como puedo insertar un salto de línea : archi.write(svnombreRP.get()) Lo hago de la siguientes maneras y no me funciona: No funciona archi.write(svnombreRP.get()'/n') No funciona archi.write(svnombreRP.get()/n) No funciona, me imprime la variable ...
Python elemento IN lista de strings – python python-3.x
Pregunta: tengo la siguiente lista y string: lis = palabra = 'ejemplo' Pero cuando hago palabra in lis Me retorna False. ¿A qué ...
Python: Cómo importar una función desde un archivo – python python-3.x
Pregunta: Estoy teniendo problemas para importar una función: def helloworld(): print("Hello World!") La tengo en un archivo llamado ...
Reasignar valores aleatoriamente a una variable, con una distribución de probabilidad – python python-2.7
Pregunta: Supongamos que hemos declarado una serie de variables (V1, V2, V3, V4) y otra serie de variables (probabilidades): V1="A" V2="B" V3="C" V4="D" Prob_V1=0.2 #probabilidad de reasignar "A" a ...
¿Cómo hacer una tabla de distribución de frecuencias con python? – python python-3.x numpy
Pregunta: Estoy trabajando con distribuciones de frecuencias, hice un script sencillo pero muy redundante que me permite obtener la distribución de frecuencias relativa de ciertos ...
.isalpha() con espacios no funciona en Python 3x – python python-3.x
Pregunta: equipos = print (equipos) print (equipos) print (equipos) print (equipos) while True: equipo = input("n¿Con que equipo te gustaria jugar? ...
¿Cómo hacer una división decimal de un número mayor a 10^308 en Python? – python matemáticas
Pregunta: Intento hacer esta división como parte de un algoritmo de cambio de bases numéricas y me da error de desbordamiento. Python ...
¿Cómo puedo llamar una función de python desde javascript en un proyecto de django? – javascript python django
Pregunta: Estoy haciendo un proyecto que requiere hacer calculadoras complejas en python, necesito pasar datos que ingresa el usuario en la pagina web, a los ...
Django urls.py error – python nodejs django
Pregunta: Buenos días, Estoy intentando meter el 'MEDIA_ROOT' en 'urls.py' pero cuando ejecuto el 'runserver' me aparece el siguiente error: File "C:UsersManuxDesktoppd110libsite-packagesdjangoconfurlsstatic.py", line ...

Add a Comment

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