Saltar al contenido
src / articulos / 01-fundamentos-de-python.md

Fundamentos de Python: Sintaxis y Tipos de Datos

Emilio Castro //

Python se ha consolidado como el lenguaje lingua franca para la automatización, la ingeniería de confiabilidad (SRE) y la ciencia de datos. Su sintaxis limpia y su extensa biblioteca estándar permiten construir desde utilidades de línea de comandos hasta arquitecturas complejas de microservicios con un esfuerzo cognitivo mínimo.

En esta primera parte de la serie, revisaremos los conceptos fundamentales de Python a través de ejemplos interactivos, enfocándonos en escenarios que encontrarías en la administración de sistemas reales.

Declaración de Variables y Tipado Dinámico

A diferencia de lenguajes como C o Java, Python es de tipado dinámico. No necesitas declarar explícitamente si una variable es un entero o una cadena de texto; el intérprete lo infiere en tiempo de ejecución.

Comencemos definiendo el estado de un servidor utilizando diferentes tipos de datos:

server_hostname = 'api-prod-us-east-1'
uptime_days = 42
cpu_load_average = 1.75
active_services = ['nginx', 'docker', 'postgresql', 'datadog-agent']
exposed_ports = {
    'http': 80,
    'https': 443,
    'ssh': 2222,
    'metrics': 8125
}

print(f"""
Análisis de tipos de datos en memoria:
    server_hostname es {type(server_hostname)}
    uptime_days es {type(uptime_days)}
    cpu_load_average es {type(cpu_load_average)}
    active_services es {type(active_services)}
    exposed_ports es {type(exposed_ports)}
""")

El bloque anterior demuestra cómo asignar valores y cómo inspeccionar la estructura de esos datos utilizando la función integrada type(). Entender exactamente qué tipo de estructura estás manipulando (por ejemplo, diferenciar un list de un dict) es el primer paso para evitar errores de ejecución en scripts de automatización.


Ejemplo Práctico: Inventario Interactivo

Para consolidar estos conceptos, construiremos un script interactivo. En lugar de ejemplos teóricos genéricos, diseñaremos una herramienta básica de inventario que interactúe con el operador:

  • Solicitará el nombre del servidor o instancia.
  • Solicitará el año en el que la instancia fue provisionada.
  • Calculará el tiempo de vida operativo (edad del servidor) basándose en el año actual.
  • Emitirá un reporte de estado formateado.

Para capturar la entrada del operador, utilizamos la función input().

# Capturamos el identificador del servidor
instance_id = input("Por favor, ingresa el identificador de la instancia (ej. db-node-01):\n")

Por defecto, todo lo que input() captura se evalúa como una cadena de texto (str). Dado que necesitamos realizar operaciones matemáticas con el año de aprovisionamiento, debemos convertir explícitamente esa entrada a un número entero utilizando int().

# Capturamos el año y forzamos su evaluación como entero
provision_year = int(input("Ingresa el año de aprovisionamiento del servidor:\n"))

Para calcular la antigüedad de la instancia de forma dinámica, necesitamos conocer el año actual. Python incluye el módulo datetime en su biblioteca estándar, ideal para operaciones temporales.

from datetime import datetime

Una vez importado, invocamos la función now() acoplada a la propiedad year para extraer el año en curso del sistema.

current_year = datetime.now().year

Con ambos valores numéricos, el cálculo es una simple resta aritmética:

operational_years = current_year - provision_year

Finalmente, utilizamos las cadenas “f-strings” (formato de cadenas literales) introducidas en Python 3.6, que permiten incrustar expresiones directamente dentro del texto para generar nuestra salida.

print(f"[REPORTE] La instancia {instance_id} lleva {operational_years} años en operación desde {provision_year}.")

El Script Completo

Si ensamblamos todos los componentes, el resultado es una utilidad funcional de diagnóstico básico:

from datetime import datetime

instance_id = input("Por favor, ingresa el identificador de la instancia (ej. db-node-01):\n")
provision_year = int(input("Ingresa el año de aprovisionamiento del servidor:\n"))

current_year = datetime.now().year
operational_years = current_year - provision_year

print(f"[REPORTE] La instancia {instance_id} lleva {operational_years} años en operación (Aprovisionada: {provision_year}).")

Una nota sobre estructura: Habrás notado que la declaración from datetime import datetime se encuentra en la primera línea. Esto obedece al estándar de diseño PEP 8, el cual estipula que todas las importaciones de módulos deben resolverse al inicio del archivo. Adoptar estas convenciones desde el primer día te asegurará producir código que otros ingenieros puedan leer y mantener.

Con este script funcional, hemos cubierto la interacción I/O básica y el manejo de tipos primitivos. En los siguientes artículos de la serie, profundizaremos en el control de flujo y la manipulación de estructuras de datos complejas.