Módulos en Python

10. La sentencia import ...from

Luego que se haya instalado un módulo o paquete este puede ser usado en un programa.  Para ello se usa la sentencia: import

Como mencionamos anteriormente, la sentencia from carga solo atributos especificados.

Vamos a crear un módulo propio, recordemos que un módulo no es mas que un archivo de Python, Nuestro archivo se llama mi_modulo.py

Figura 1

Guardo este "modulo" propio creado por mi en el mismo directorio que el archivo python siguiente que se llama programa1.py

Utilizar la sentencia from permite que escribamos menos debido a que no tienes que especificar el nombre completo del módulo cuando lo llamas,

De hecho, en su interior, la sentencia from es una extensión de sentencia import, también se carga el archivo completo ( *, quiere decir TODOS los elementos del Módulo), pero se le proporcionarán todos los atributos directamente desde tu código.

Figura 2

Vemos que si bien el diccionario persona1 , no está definido ni declarado en el código está importado, solo ese diccionario. Esta sería la salida:

Figura 3


El peligro de utilizar la sentencia From:

Algunos desarrolladores de Python recomiendan usar siempre la sentencia import y evitar la from. ¿Pero esto es cierto? ¿La sentencia from no es segura?.

Bueno, si utilizamos el archivo from para importar variables o funciones, como el caso anterior que importamos el diccionario persona1, sobrescribirá cualquier variable que tenga el mismo nombre si existe sin previo aviso. Esto genera confusión y hay que tomar mucho cuidado. Veamos un ejemplo.

mi_modulo.py

Figura 4

programa1.py

Figura 5

La salida sería:

Figura 6

Vemos que la variable x en mi_modulo.py vale 999, pero en la ejecución se toma el valor local 5. Esto se agrava si no somos nosotros los que escribimos el módulo..por lo que es muy probable que desconozcamos muchos nombres de variables, constantes y funciones.


import ..from vs. import.


El uso de uno u otro modifica la forma en que voy a hacer referencia a los elementos, de esta manera minimizamos el problema anterior (usando import. ) ya que debemos usar el nombre completo del módulo .(punto) nombre de la función o método. Veamos con un ejemplo.


mi_modulo.py

Figura 7

programa1.py

Figura 8

Vemos que al usar el operador . (punto)  no hay posibilidades de equivocarse, ya que en la línea 8 el operador . hace que se ejecute saludos de mi_modulo.py y en la línea 9 se ejecuta saludos de la línea 4. Esta sería la salida.

Figura 9