El formato que vas a usar de verdad
Las f-strings son la forma por defecto en la que el código Python moderno incrusta valores en texto. Pon una f delante de la comilla de apertura, y cualquier cosa dentro de {...} se convierte en una expresión en vivo:
Tres cosas a fijarse. El prefijo f convierte todo el literal en una plantilla. Las llaves son los puntos de sustitución. Y la expresión dentro de las llaves se evalúa en el momento en que print se ejecuta, no cuando el string se escribió.
Escribirás f-strings muchísimo más a menudo que cualquier otro estilo de formateo. Son más cortas que "Hello, " + name + ".", más claras que "Hello, %s." % name, y más flexibles que .format().
Cualquier cosa que se evalúe puede ir dentro
Las llaves no están restringidas a nombres de variable. Cualquier expresión de Python vale:
Llamadas a métodos, indexación, aritmética, expresiones condicionales — todo bien. La única regla: mantén corto lo que va entre llaves. Si estás escribiendo un cálculo de tres líneas dentro de un marcador, cómputalo primero en una variable con nombre y suelta ahí el nombre.
Formatear números
Un dos puntos después de la expresión abre un format spec — un mini-lenguaje para controlar cómo se muestra el valor:
Una guía rápida de qué hace cada pieza:
.2f— float, dos dígitos después del punto. Redondea al mostrar.,— coma como separador de miles. Funciona para int y float..1%— multiplica por 100 y añade%. Genial para ratios y porcentajes..2e— notación científica con dos dígitos decimales.
Puedes combinarlas. f"{total:,.2f}" da "1,234.57".
Padding, anchura y alineación
Para alinear columnas de salida:
<10 significa "alineación a la izquierda, rellenado hasta al menos 10 caracteres". >5 significa "alineación a la derecha, rellenado hasta 5". También puedes usar ^ para centrar.
Rellena con algo que no sean espacios poniendo el carácter de relleno antes de la bandera de alineación:
Formatear fechas
La misma sintaxis {value:spec} funciona para objetos datetime:
El spec después del dos puntos es un string de formato strftime. Todo %-código disponible para strftime funciona aquí — los cubriremos en detalle en la página de datetime.
El truco = para depurar
Una de las features de nicho más útiles: pon = después de la expresión y Python imprime tanto el código fuente de la expresión como su valor:
Obtienes count=7, price=19.99, count * price=139.93. Eso es un print("count =", count) entero en tres caracteres. Vale la pena recordarlo la próxima vez que estés depurando y quieras sacar unos cuantos valores.
Escapar llaves
Si necesitas un { o } literal en la salida, duplícalos:
Las llaves simples abren una expresión; {{ y }} representan { y } en la salida.
f-Strings multilínea
Las f-strings se llevan bien con las triples comillas, lo que ayuda cuando estás construyendo pequeñas plantillas inline:
También puedes partir una f-string larga entre varios literales de string adyacentes — Python los concatena automáticamente:
Cuando todavía aparecen los estilos antiguos
Te encontrarás con dos estilos de formateo más antiguos en código existente:
Los tres producen la misma salida. Las f-strings ganan en legibilidad nueve de cada diez veces. Recurre a .format() cuando necesites construir una plantilla una vez y aplicarla muchas; usa % solo cuando estés manteniendo código más antiguo que ya lo usa.
Para qué no son buenas
Dos situaciones piden una herramienta distinta.
Construir consultas SQL. Nunca interpoles entrada de usuario en un string SQL con una f-string. Usa las consultas parametrizadas de tu librería de base de datos. Una f-string ahí es cómo ocurre la inyección SQL.
Construir texto de UI traducido. Si tu app soporta varios idiomas, quieres una plantilla que las herramientas de traducción externas puedan recoger — normalmente el _(...) de gettext o un helper específico del framework. Una f-string incrusta la estructura en el código fuente, lo que hace la traducción mucho más difícil.
Para todo lo demás — logs, salida de consola, construcción de URLs, armado de strings de configuración, formateo de números para mostrar — las f-strings son la respuesta correcta.
Siguiente: números y booleanos
Las f-strings ganan mucho kilometraje formateando números, así que vale la pena conocer los tipos numéricos un poco más a fondo. Eso viene ahora.
Preguntas frecuentes
¿Qué es una f-string en Python?
Una f-string es un literal de string prefijado con f, donde cualquier cosa dentro de {...} se reemplaza en tiempo de ejecución con el valor de la expresión. f"Hello, {name}" inserta el valor actual de name en el string.
¿Cuándo se añadieron las f-strings a Python?
Python 3.6. Toda versión moderna de Python las soporta, así que puedes usar f-strings en cualquier sitio donde estés escribiendo código Python 3 hoy. Los estilos de formateo más antiguos (% y .format()) siguen funcionando pero se leen peor en la mayoría de casos.
¿Cómo formateo un número con 2 decimales en Python?
Usa un format spec después de un dos puntos dentro de las llaves: f"{price:.2f}". El .2f significa 'float con dos dígitos después del punto decimal'. Redondea el valor mostrado; el número original no cambia.
¿Puedo meter cualquier expresión dentro de una f-string?
Sí — aritmética, llamadas a métodos, llamadas a funciones, expresiones condicionales. f"{name.upper()}" y f"{price * 1.2:.2f}" ambos funcionan. Mantén las expresiones cortas; si el código dentro de las llaves se vuelve enmarañado, cómputalo primero en una variable.