Formateo de cadenas en Python: Técnicas modernas y heredadas

Operador % (heredado, en desuso)

Aunque aún funcional, este método proviene de C y carece de seguridad y claridad. Usa marcadores como %s para cadenas y %d para enteros.

# Uso básico
saludo = "Hola, soy %s y tengo %d años" % ("Ana", 27)
print(saludo)  # Hola, soy Ana y tengo 27 años

# Con nombres explícitos (menos común)
datos = {"usuario": "Carlos", "nivel": 5}
mensaje = "Jugador: %(usuario)s — Nivel: %(nivel)d" % datos
print(mensaje)  # Jugador: Carlos — Nivel: 5

# Escapar el símbolo %: usar %%
progreso = "Descarga completada al %d%%" % 95
print(progreso)  # Descarga completada al 95%

Método str.format() (flexible y explícito)

Introducido en Python 2.6, ofrece mayor control mediante índices posicionales o nombres de clave.

# Por posición numérica
frase = "El valor de {0} es {1:.2f}, y {0} aparece dos veces.".format("pi", 3.14159)
print(frase)  # El valor de pi es 3.14, y pi aparece dos veces.

# Por nombre de parámetro
plantilla = "Nombre: {nombre}, Edad: {edad}, Ciudad: {ciudad}"
resultado = plantilla.format(nombre="Luis", edad=32, ciudad="Madrid")
print(resultado)  # Nombre: Luis, Edad: 32, Ciudad: Madrid

# Reutilización y formato avanzado
precio = 129.99
detalle = "Precio final: {precio:.2f} € — IVA incluido".format(precio=precio)
print(detalle)  # Precio final: 129.99 € — IVA incluido

F-strings (f-strings, introducidas en Python 3.6)

La opción más moderna, eficiente y legible. Permite incrustar expresiones directamente dentro de llaves, incluyenod llamadas a funciones, operaciones aritméticas y formatos especializados.

# Sintaxis básica
nombre = "Rosa"
edad = 29
texto = f"Me llamo {nombre} y cumpliré {edad + 1} años este mes."
print(texto)  # Me llamo Rosa y cumpliré 30 años este mes.

# Formato numérico y conversiones
numero = 42
print(f"Binario: {numero:b} | Octal: {numero:o} | Hex: {numero:x}")  
# Binario: 101010 | Octal: 52 | Hex: 2a

# Expresiones con signo igual (debugging)
valor = 15
print(f"{valor * 2 = }")  # valor * 2 = 30

# Llamadas a métodos integrados
titulo = "python para principiantes"
print(f"Versión normalizada: {titulo.title()}")  # Versión normalizada: Python Para Principiantes

Recomendaciones prácticas

  • Usa f-strings para código nuevo: son más rápidos, legibles y soportan expresiones complejas.
  • Evita % excepto en sistemas heredados o cuando se requiere compatibilidad con versiones antiguas de Python.
  • Prefiere str.format() solo si necesitas reutilizar la misma plantilla con múltiples conjuntos de valores o si trabajas con Python < 3.6.

Etiquetas: f-string format python-string-formatting

Publicado el 8-25 03:18