Una f-string evalúa la expresión que va entre llaves y mete el resultado en el texto. Es más rápida que % y .format(), y se lee en el orden en que piensas.
La parte después de los dos puntos es una especificación de formato, y ahí vive casi todo el comportamiento útil.
Lo básico
La f antes de la comilla es lo que activa las llaves.
# the basics
name, age = 'ada', 36
print(f'{name} is {age}')
Imprime:
ada is 36
Adentro cabe cualquier expresión
Llamadas a métodos, indexación, aritmética y comparaciones: todo funciona.
# any expression fits inside the braces
items = ['a', 'b', 'c']
print(f'{len(items)} items, first is {items[0].upper()}')
print(f'{age * 2} and {age > 30}')
Imprime:
3 items, first is A
72 and True
Mantenlas cortas. Si la expresión requiere pensar, ponle nombre en la línea de arriba.
Formato de números
Después de los dos puntos: relleno y alineación, después ancho, después precisión y tipo.
# number formatting
price = 1234.5678
print(f'{price:.2f}')
print(f'{price:,.2f}')
print(f'{price:>12.2f}|')
print(f'{price:<12.2f}|')
print(f'{price:^12.2f}|')
print(f'{0.4567:.1%}')
Imprime:
1234.57
1,234.57
1234.57|
1234.57 |
1234.57 |
45.7%
< es a la izquierda, > a la derecha, ^ al centro. La coma inserta separadores de miles, y % multiplica por 100 y agrega el signo.
Alinear columnas
Ancho más alineación alcanza para tablas legibles en la terminal.
# padding and alignment for tables
rows = [('apple', 3), ('bread', 12), ('milk', 1)]
for item, qty in rows:
print(f'{item:<10}{qty:>4}')
Imprime:
apple 3
bread 12
milk 1
El signo igual para depurar
Poner = al final imprime la expresión además de su valor. Es la depuración con print más rápida que hay en Python.
# the = suffix prints the expression too
total = sum(q for _, q in rows)
print(f'{total=}')
print(f'{len(rows)=}')
Imprime:
total=16
len(rows)=3
Fechas y otros tipos
La especificación de formato se le pasa al objeto, así que cualquier cosa con un método __format__ tiene su propio mini lenguaje. Las fechas usan los códigos de strftime.
# dates and other __format__ types
import datetime
when = datetime.datetime(2026, 8, 20, 14, 30)
print(f'{when:%d %B %Y}')
print(f'{when:%H:%M}')
Imprime:
20 August 2026
14:30
Llaves literales
Duplícalas.
# literal braces are doubled
print(f'{{not a placeholder}} but {name} is')
Imprime:
{not a placeholder} but ada is
Relleno con ceros, signos y caracteres de relleno
Un cero antes del ancho rellena con ceros. Un más obliga a mostrar el signo. Cualquier carácter antes del marcador de alineación se vuelve el relleno.
# fill characters and signs
print(f'{42:05d}')
print(f'{42:+d} {-42:+d}')
print(f'{"title":*^20}')
Imprime:
00042
+42 -42
*******title********
Qué recordar
-
La especificación de formato va después de dos puntos, dentro de las llaves.
-
:,.2fcubre casi todo el formato de dinero. -
f"{valor=}"imprime la expresión y el valor. -
Duplica las llaves cuando quieras una llave literal.
Una advertencia: nunca construyas SQL ni comandos de shell con f-strings. Usa el soporte de parámetros de tu driver de base de datos, y subprocess con una lista.