f-strings en Python: formateo moderno, expresiones y el truco del = para depurar

Las f-strings, introducidas en Python 3.6, son la forma recomendada de formatear cadenas. Son más rápidas que str.format() y %, más legibles que la concatenación y ofrecen un control de formato sorprendentemente completo.

Sintaxis básica y expresiones

nombre = "Ana"
edad   = 28

# Interpolación básica
print(f"Me llamo {nombre} y tengo {edad} años")
# Me llamo Ana y tengo 28 años

# Cualquier expresión válida dentro de {}
print(f"El doble de {edad} es {edad * 2}")
print(f"Mayúsculas: {nombre.upper()}")
print(f"Lista: {[x**2 for x in range(5)]}")

# Condicional inline
activo = True
print(f"Estado: {'activo' if activo else 'inactivo'}")

Format spec: decimales y alineación

Después de los dos puntos (:) dentro de la llave se escribe la especificación de formato, con la misma sintaxis que format():

precio = 1234.5678
pi     = 3.14159265

# Decimales
print(f"{precio:.2f}")      # 1234.57
print(f"{pi:.4f}")          # 3.1416

# Separador de miles
print(f"{1234567:,}")       # 1,234,567
print(f"{1234567:_.2f}")    # 1_234_567.00

# Alineación: < izquierda, > derecha, ^ centrado
print(f"{'hola':>10}")      #       hola
print(f"{'hola':<10}!")     # hola      !
print(f"{'hola':^10}")      #    hola   

# Padding con carácter
print(f"{'42':0>5}")        # 00042

# Porcentaje
ratio = 0.12345
print(f"{ratio:.1%}")       # 12.3%

Conversiones: !r y !s

texto = "HolanMundo"
objeto = [1, 2, 3]

print(f"{texto!s}")    # HolanMundo  (str())
print(f"{texto!r}")    # 'HolanMundo' (repr() — útil para ver caracteres especiales)
print(f"{objeto!r}")   # [1, 2, 3]

El truco f'{var=}' para depurar (Python 3.8+)

x = 42
y = [1, 2, 3]
nombre = "Python"

# El signo = imprime nombre y valor
print(f"{x=}")         # x=42
print(f"{y=}")         # y=[1, 2, 3]
print(f"{nombre=}")    # nombre='Python'

# Combinable con format spec
import math
angulo = math.pi / 4
print(f"{angulo=:.4f}")  # angulo=0.7854

# Muy útil para depuración rápida sin print("x =", x)
def calcular(a, b):
    resultado = a * b + a
    print(f"{a=}, {b=}, {resultado=}")
    return resultado

f-strings multilínea y anidadas

usuarios = [{"nombre": "Ana", "edad": 28}, {"nombre": "Luis", "edad": 34}]

# Multilínea
tabla = (
    f"{'Nombre':<10} {'Edad':>5}n"
    f"{'-'*10} {'-'*5}n"
)
for u in usuarios:
    tabla += f"{u['nombre']:<10} {u['edad']:>5}n"
print(tabla)

Por qué nunca usar f-strings para SQL

# MAL — SQL injection
usuario_id = input("ID: ")
# cursor.execute(f"SELECT * FROM usuarios WHERE id = {usuario_id}")
# Si usuario_id = "1 OR 1=1", filtra toda la tabla

# BIEN — parámetros vinculados
usuario_id = input("ID: ")
cursor.execute("SELECT * FROM usuarios WHERE id = %s", (usuario_id,))

Las f-strings son para construir cadenas de texto para mostrar al usuario, escribir en logs o generar documentos. Para consultas a bases de datos, URLs con parámetros o cualquier dato que venga del usuario, usa siempre parámetros vinculados o las funciones de encoding correspondientes.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP