Todos los formatos que acabarás buscando, reunidos en un solo sitio. El patrón siempre es f"{value:format}": valor, dos puntos y especificador de formato.
🎙️ Publicado y grabado:
name, price, big, ratio = "Ada", 49.9, 1234567, 0.8756
f"{name}" # Ada básico
f"{price:.2f}" # 49.90 2 decimales ← lo más buscado
f"{big:,}" # 1,234,567 separador de miles
f"{ratio:.1%}" # 87.6% porcentaje
f"{price:>10.2f}" # " 49.90" alineado a la derecha, ancho 10
f"{name:<10}|" # "Ada |" alineado a la izquierda (¡tablas!)
f"{name:^10}" # " Ada " centrado
f"{42:05d}" # 00042 rellenado con ceros
f"{255:x}" f"{255:b}" # ff / 11111111 hexadecimal, binario
f"{2+3}" # 5 admite cualquier expresión
f"{price=}" # price=49.9 impresión de depuración (3.8+) ← infravalorada
f"{{literal}}" # {literal} llaves escapadas
from datetime import datetime
now = datetime.now()
f"{now:%Y-%m-%d}" # 2026-07-22
f"{now:%H:%M}" # 14:30
f"{now:%b %d, %Y}" # Jul 22, 2026
f"{now:%A}" # Wednesday
width, prec = 12, 3
f"{price:{width}.{prec}f}" # " 49.900" — los especificadores también pueden ser variables
f"{d["key"]}" produce un SyntaxError: las comillas dobles interiores cierran la cadena. Usa comillas distintas: f"{d['key']}". Python 3.12 y posteriores permiten anidar el mismo tipo de comillas, pero, si tu código puede ejecutarse en versiones antiguas, mezclar estilos sigue siendo el hábito seguro.%s y .format() en código antiguo: aprende a leerlos, pero no los uses al escribir código nuevo. Hay una excepción: el registro de eventos (logger.info("x=%s", x)) conserva a propósito el estilo con %, para que la cadena solo se construya cuando ese nivel de registro está activo.