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.