Bienvenidos sean a este post, hoy veremos una opcion de trabajo que nos brindara mucha ayuda en nuestros codigo.
Hasta los posts anteriores cubrimos bastante sobre las funciones pero ahora veremos como podemos reutilizarlas, si bien cuando vimos el ejemplo de este post hablamos de como importar la funcion desde un modulo pero hoy hablaremos mas a fondo sobre como hacerlo, para poder importar un modulo o una funcion de un modulo python nos provee dos funciones:
-Importar modulo:
import nombre_modulo
-Importar funcion de un modulo:
from nombre_modulo import nombre_funcion
La primera funcion busca el modulo que le pasemos, luego define un nombre (variable) para este en el namespace local desde donde la funcion import fue ejecutado, la segunda funcion es un poco mas compleja pero trabaja de forma similar ya que primero busca el modulo y luego asigna un nombre a la funcion en el namespace local donde se ejecuto, ambas funciones soportan la opcion de as para poder asignar un alias a esta accion:
from nombre_modulo import nombre_funcion as un_nombre_mejor
A continuacion veremos las distintas formas de importar, pasemos con el primer ejemplo:
from datetime import datetime, timezone
Este importa dos funciones del modulo de datetime, como pueden ver podemos importar todas las necesarias si las separamos por comas, veamos el siguiente:
from unittest.mock import patch
Este importa una sola funcion pero vemos como podemos usar el orden de los namespaces donde primero pasamos el paquete y luego el modulo, veamos el siguiente caso:
import pytest
Este es el que hablamos al principio donde solo importamos el modulo, veamos el ultimo caso:
from core.models import (
Exam,
Ejercicio,
Solucion,
)
Este es el mismo caso que el primero pero lo hacemos con multilineas, para ello simplemente debemos poner entre parentesis todas las funciones que deseamos importar, vamos a crear un ejemplo para ponerlo en practica pero en este caso vamos a crear un proyecto en particular, para ello primero crearemos un directorio que llamaremos cuentas, dentro de este directorio crearemos otro que se llame libs, dentro de libs crearemos un archivo que llamaremos funciones.py y le agregaremos el siguiente codigo:
funciones.py
def cuadrado(n):
return n ** 2
def cubo(n):
return n ** 3
En este caso tenemos dos funciones, la primera sera para calcular el cuadrado del numero informado, la segunda funciona calcula el cubo del numero informado, con esto concluimos con el codigo del archivo, volvemos al directorio cuentas y crearemos un nuevo archivo llamado func_from.py y le insertaremos el siguiente codigo:
func_from.py:
from libs.funciones import cuadrado, cubo
print(cuadrado(10))
print(cubo(10))
Como pueden ver primero pasamos la ubicacion donde se encuentra el modulo llamado funciones y luego importamos las dos funciones que poseen, despues mostramos la salida de las dos funciones con un valor informado, pronto lo probaremos pero antes vamos a crear dentro del mismo directorio donde esta el archivo anterior uno nuevo que llamaremos func_import.py y agregaremos el siguiente codigo:
func_import.py
import libs.funciones
print(libs.funciones.cuadrado(10))
print(libs.funciones.cubo(10))
En este caso vemos como importa solamente el modulo pero la diferencia esta a la hora de imprimirlo porque a diferencia del caso anterior debemos informar todo el namespace donde esta ubicada la funcion, es decir el directorio o paquete, seguida del modulo y finalmente la funcion, en ambos casos debemos hacer lo mismo pero cuando lo probemos debemos obtener el mismo resultado en ambos casos, antes de probarlos veamos como quedo la estructura de nuestro proyecto:
cuentas/
├── func_from.py
├── func_import.py
└── libs
└── funciones.py
Con todo esto comentado vamos a probar los archivos que generamos para verificar el funcionamiento de las funciones:
tinchicus@dbn001vrt:~/python/cuentas$ python3 func_from.py
100
1000
tinchicus@dbn001vrt:~/python/cuentas$ python3 func_import.py
100
1000
tinchicus@dbn001vrt:~/python/cuentas$
Como podemos ver ambos programas funcionaron correctamente dado que trajeron las funciones que correspondian pero a la hora de manejarlos recuerden que en el caso de importar solo el modulo a la hora de usar las funciones deben pasar todo el namespace donde se encuetra la funcion, en cambio si usan el from y luego importan las funciones que necesiten pueden usarlo directamente, con esto completamos como importar objetos.
Pero esto que hicimos es para importar objetos de manera absoluta pero python nos permite otra opcion como es importar de manera relativa, esto nos sera util cuando necesitamos reordenar la estructura de paquetes grandes sin tener que editar los sub-paquetes o cuando queramos hacer un modulo dentro de un paquete con la posibilidad de importarse a si mismo, estas se hacen agregando la cantidad de puntos necesarios en frente del modulo, estos se ajustaran a la cantidad de directorio que debemos retroceder para encontrarlos, un ejemplo de sintaxis seria el siguiente:
from .mimodulo import mifuncion
Por ahora dejemoslo aca porque mas adelante cuando empecemos con proyectos mas grandes veremos distintos tipos de importaciones y entre ellos mas a fondo los relativos.
En resumen, hoy hemos visto mas a fondo como es la importacion tanto de modulos como de funciones, hemos visto las dos posibilidades que disponemos, tambien mencionamos como usar un alias, despues vimos las distintas combinaciones para poder importarlas en base a los dos posibilidades y despues vimos un ejemplo para entender cual es la diferencia entre importar solo el modulo e importar las funciones desde un modulo, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00
