1.1 Introducción a los módulos
Un módulo en Python es un archivo con extensión .py que contiene código. Los módulos permiten dividir un código grande en partes más pequeñas y manejables. Cada módulo puede contener funciones, clases y variables, y también ejecutar cierto código al ser importado.
Ejemplo de un módulo simple
Vamos a crear un módulo mymodule.py
:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Ahora este módulo se puede importar y usar en otro archivo.
1.2 Importación de módulos
Python ofrece varias formas de importar módulos. Vamos a verlas una a una.
Importar todo el módulo
La sintaxis general de esta operación es la siguiente:
import módulo
Este método importa todo el módulo, y puedes usar sus funciones y variables indicando el nombre del módulo.
import módulo
print(módulo.greet("Alice")) # Salida: Hello, Alice!
print(módulo.pi) # Salida: 3.14159
Ya hicimos algo similar antes con el módulo math
, ¿recuerdas?
import math
print(math.ceil(13 / 7)) # redondeo hacia arriba
print(math.floor(13 / 7)) # redondeo hacia abajo
Importar elementos específicos de un módulo
Puedes importar no todo lo que hay en el módulo, sino solo algunos de sus elementos. La sintaxis general de esta operación es la siguiente:
from módulo import func, var
Este método importa solo ciertas funciones, clases o variables del módulo, permitiendo usarlas sin indicar el nombre del módulo.
from mymodule import greet, pi
print(greet("Bob")) # Salida: Hello, Bob!
print(pi) # Salida: 3.14159
Importar módulo con un alias
La sintaxis general de esta operación es la siguiente:
import módulo as alias
Este método permite importar un módulo y asignarle otro nombre, lo cual puede ser útil para acortar nombres de módulos largos o resolver conflictos de nombres.
import mymodule as mm
print(mm.greet("Charlie")) # Salida: Hello, Charlie!
print(mm.pi) # Salida: 3.14159
Importar todos los elementos de un módulo
La sintaxis general de esta operación es la siguiente:
from módulo import *
Este método importa todas las funciones, clases y variables del módulo, permitiendo usarlas sin indicar el nombre del módulo. Sin embargo, no se recomienda usar este método, ya que puede causar conflictos de nombres y dificultar la lectura del código.
from mymodule import *
print(greet("Dave")) # Salida: Hello, Dave!
print(pi) # Salida: 3.14159
1.3 Bajo el capó del proceso de importación
Orden de búsqueda de módulos
Cuando importas un módulo, Python lo busca en un orden específico:
- Directorio actual: Python primero busca el módulo en el directorio actual desde donde se ha ejecutado el script.
-
Variable de entorno
PYTHONPATH
: Si el módulo no se encuentra en el directorio actual, Python lo busca en los directorios indicados en la variable de entornoPYTHONPATH
. -
Directorios estándar: Si el módulo aún no se encuentra, Python lo busca en los directorios estándar, tales como los directorios indicados en
sys.path
.
Ejemplo:
import sys
for path in sys.path:
print(path)
Importación local y global
Los módulos pueden ser importados tanto a nivel global (al inicio del archivo) como a nivel local (dentro de una función o método).
Importación global
La importación global se realiza al inicio del archivo y hace que el módulo importado esté disponible en todo el archivo.
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
Importación local
La importación local se realiza dentro de una función o método y hace que el módulo importado esté disponible solo en esa función o método.
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
La importación local puede ser útil para reducir el tiempo de carga de un módulo o para prevenir conflictos de nombres.
1.4 Importación dinámica
La importación dinámica permite importar módulos durante el tiempo de ejecución del programa. Esto puede ser útil cuando es necesario importar módulos basados en la entrada del usuario u otras condiciones dinámicas.
La sintaxis general de esta operación es la siguiente:
module = __import__("módulo")
Vamos a importar el módulo math
de esta manera como ejemplo.
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # Salida: 4.0
Trabajar con el código siguiente es como usar import as
, donde al módulo math
se le asigna el alias module
.
1.5 Acceso a atributos de módulos utilizando la función getattr
La función getattr
permite obtener dinámicamente atributos de un módulo (o cualquier objeto). Puede ser útil en los casos en que los nombres de los atributos son desconocidos de antemano o pueden cambiar durante la ejecución del programa.
Sintaxis de la función getattr
:
getattr(object, name, default = None)
Donde object
es el objeto del cual se desea obtener un atributo, name
es una cadena que contiene el nombre del atributo, y default
es el valor que se devuelve si el atributo con el nombre dado no existe. El valor por defecto para el parámetro default
es None
.
Ejemplo de uso de la función getattr
:
import math
# Obtenemos el atributo sqrt del módulo math
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # Salida: 5.0
# Intentamos obtener un atributo inexistente, devolviendo el valor por defecto
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # Salida: default_value
En este ejemplo usamos la función getattr
para obtener la función sqrt
del módulo math
, y luego llamamos a esta función para calcular la raíz cuadrada del número 25. En caso de que el atributo con el nombre dado no exista, se devuelve el valor por defecto default_value
.
GO TO FULL VERSION