Saltar a contenido

Módulos que definen funciones

Supongamos el siguiente programa:

Circulo.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
pi = 3.14159

def perimetro(r):
    perim = r * pi * 2
    return perim

def area(r):    
    area = pi * (r**2)
    return area

radio = 5
print(perimetro(radio))
print(area(radio))

Aquí tenemos tres identificadores que podríamos en un fichero aparte, de forma que sean reutilizables en varios proyectos:

  • valor de PI
  • función perimetro()
  • función area()

Crear un módulo con definiciones

Colocamos esas definiciones en un archivo MisFunciones.py:

MisFunciones.py
1
2
3
4
5
6
7
8
9
pi = 3.14159

def perimetro(r):
    perim = r * pi * 2
    return perim

def area(r):    
    area = pi * (r**2)
    return area

De forma que el programa principal queda así:

Circulo.py
1
2
3
4
import misfunciones
radio = 5
print(misfunciones.perimetro(radio))
print(misfunciones.area(radio))

Vemos que:

  • Los módulos a utilizar en nuestro programa han de importarse.
  • Las funciones de módulos importados van precedidas por el nombre del módulo.

Podríamos importar directamente las funciones:

Circulo.py
1
2
3
4
from misfunciones import perimetro, area
radio = 5
print(perimetro(radio))
print(area(radio))

Ruta de importación

Python busca los módulos importados:

  • en la misma carpeta que el programa principal
  • en las carpetas definidas por el sistema

¿Cuales son las carpetas donde se ubican los módulos de Python? Lo podemos averiguar importando el módulo sys y examinando la lista sys.path:

>>> import sys
>>> for carpeta in sys.path:
...     print(carpeta)

    /home/usuario/proyectos/circulo
    /home/usuario
    /usr/bin
    /usr/lib/python3.13
    /usr/lib/python3.13/lib-dynload
    /usr/local/lib/python3.13/dist-packages
    /usr/lib/python3/dist-packages

Cada sistema operativo es un mundo y tiene sus propias rutas. En este ejemplo vemos que primero se busca en la misma carpeta que el programa principal.

El directorio __pycache__

Cuando el intérprete de Python ejecuta un programa, toma el texto de las instrucciones y hace una traducción "al vuelo", obteniendo el mismo programa en formato de ceros y unos, algo que es conocido como "lenguaje máquina", y que el ordenador es capaz de entender y ejecutar.

En el caso de importar un módulo, este también se traduce. Pero para evitar tener que estar haciendo esta compilación cada vez que ejecutamos el programa, automáticamente se guarda el módulo en formato binario en un archivo especial con extensión .pyc (python compilado) en una carpeta llamada __pycache__, dentro de la misma carpeta que el módulo.

Los archivos dentro de la carpeta __pycache__ se reconstruirán si el intérprete de Python detecta que el módulo ha sido modificado.

Los archivos .pyc tienen el mismo nombre que el módulo en cuestión, a lo que se añade la palabra cpython seguido por la versión de Python que estamos utilizando.