3.3 Modularidad, bibliotecas estándar (math, random) y scripts .py

1

Concepto de módulo y clausuras de importación

Un módulo en Python es cualquier archivo con extensión .py que contiene definiciones de funciones, clases y constantes reutilizables:

$$\text{import math} \quad \text{o bien} \quad \text{from math import sqrt, pi, exp}$$
Ejemplo:

Importamos el módulo matemático para calcular la distancia euclídea entre dos puntos:

$$\text{distancia = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)}$$
2

Constantes y funciones de la biblioteca math

La biblioteca math proporciona acceso directo a las constantes fundamentales y funciones de la biblioteca estándar de C:

$$\text{math.pi} \approx 3.14159265, \quad \text{math.e} \approx 2.71828182$$
Ejemplo:

Calculamos la energía cinética relativista de una partícula rápida:

$$\text{gamma = 1.0 / math.sqrt(1.0 - (v / 3e8)**2)}$$
3

Generación de números pseudoaleatorios con el módulo random

El módulo random implementa el generador Mersenne Twister con un periodo inmenso de $2^{19937}-1$:

$$\text{import random} \quad \longrightarrow \quad \text{random.uniform(a, b)}, \quad \text{random.gauss(mu, sigma)}$$
Ejemplo:

Simulamos el ruido térmico gaussiano en una medida de corriente de túnel:

$$\text{ruido = random.gauss(0.0, 0.05)}$$
4

El guardián de ejecución principal __name__ == '__main__'

Permite que un archivo funcione simultáneamente como biblioteca importable y como script ejecutable autónomo:

$$\text{if __name__ == '__main__':}$$
Ejemplo:

Colocamos pruebas unitarias y demostraciones interactivas dentro del bloque principal:

$$\text{if __name__ == '__main__': test_unitario()}$$
Ejemplo 1: Cálculo del área superficial de una nanoesfera
$$\text{import math}$$
$$\text{def area_nanoesfera(radio_nm): return 4.0 * math.pi * (radio_nm ** 2)}$$
$$\text{print(area_nanoesfera(5.0))} \longrightarrow 314.159\,\text{nm}^2$$
Ejemplo 2: Simulación de fluctuación térmica con random.uniform
$$\text{import random}$$
$$\text{temperaturas = [random.uniform(298.0, 302.0) for _ in range(5)]}$$
Ejemplo 3: Uso de alias en importaciones canónicas
$$\text{import math as m}$$
$$\text{seno_angulo = m.sin(m.radians(45.0))} \longrightarrow 0.7071$$
Ejemplo 4: Fijación de semilla determinista para reproducibilidad científica
$$\text{random.seed(42)}$$
$$\text{val_1 = random.random()} \longrightarrow \text{Idéntico resultado en cualquier máquina y ejecución.}$$
Ejemplo 5: Estructura de un módulo con guardián __main__
$$\text{def fahrenheit_a_kelvin(f): return (f - 32.0) * 5.0/9.0 + 273.15}$$
$$\text{if __name__ == '__main__': print(f"77 F son {fahrenheit_a_kelvin(77):.2f} K")}$$