W3docs

Cadenas de formato

Aprende las tres formas de formatear cadenas en Python — operador %, str.format() y f-strings — con ejemplos de números, alineación y casos reales.

El formateo de cadenas es la manera de insertar valores de variables en texto. Python ofrece tres enfoques: el operador % heredado, el versátil método str.format() y la moderna sintaxis de f-strings introducida en Python 3.6. Cada uno produce el mismo resultado en casos sencillos, pero difieren en potencia, legibilidad y la versión de Python que requieren.

Este capítulo cubre:

  • El operador % y sus códigos de tipo
  • str.format() con marcadores posicionales, basados en índice y con nombre
  • f-strings — expresiones en línea y el especificador de depuración =
  • Especificadores de formato: ancho, alineación, precisión y bases numéricas
  • Cómo elegir el método adecuado para cada situación

Capítulos relacionados: Cadenas en Python · Concatenar cadenas · Caracteres de escape · Métodos de cadenas

El operador %

El operador % es el estilo de formateo de cadenas más antiguo en Python, tomado de printf en C. Se colocan códigos de tipo dentro de la cadena como marcadores y luego se suministran los valores después del signo %.

Códigos de tipo comunes

CódigoSignificadoEntrada de ejemploSalida
%sstring (o cualquier objeto)"Alice"Alice
%dEntero4242
%fFloat3.143.140000
%rrepr() del objeto"hi\n"'hi\n'

Cadenas de formato con %s y %d

python— editable, runs on the server
My name is John and I am 30 years old.

Cuando tienes más de un valor, pásalos en una tupla. Los valores se asignan a los marcadores de izquierda a derecha:

item = "coffee"
price = 2.50
qty = 3
print("Item: %s | Price: $%.2f | Qty: %d" % (item, price, qty))
Item: coffee | Price: $2.50 | Qty: 3

El código de formato %.2f redondea el float a 2 decimales.

Cuándo usar %: Principalmente cuando se trabaja con código muy antiguo o bases de código de Python 2. Para código nuevo, es preferible usar str.format() o f-strings.

str.format()

El método str.format() utiliza marcadores con llaves {} y es más flexible que %. Admite argumentos posicionales, reutilización basada en índice y argumentos de palabra clave con nombre.

Marcadores posicionales

Las llaves vacías {} se rellenan de izquierda a derecha con los argumentos que se pasan a format():

Cadenas de formato con el método format en Python

python— editable, runs on the server
My name is John and I am 30 years old.

Marcadores basados en índice

Coloca un número dentro de las llaves para seleccionar un argumento específico. También puedes repetir el mismo argumento:

name = "John"
age = 30
print("{0} is {1} years old and {0} likes Python.".format(name, age))
John is 30 years old and John likes Python.

Marcadores con nombre

Usa nombres de palabra clave para el formateo más legible. Esto también permite reordenar los valores independientemente de la lista de argumentos:

name = "John"
age = 30
print("{name} is {age} years old.".format(name=name, age=age))
John is 30 years old.

Puedes desempaquetar un diccionario directamente con **:

person = {"name": "Alice", "city": "London"}
print("{name} lives in {city}.".format(**person))
Alice lives in London.

f-Strings (Python 3.6+)

Las f-strings (literales de cadena formateados) se escriben añadiendo el prefijo f o F a la cadena. Cualquier expresión dentro de {} se evalúa en tiempo de ejecución y se convierte en una cadena. Son la opción más rápida y legible para el código Python moderno.

Cadenas de formato usando f-strings en Python

python— editable, runs on the server
My name is John and I am 30 years old.

Como las llaves pueden contener cualquier expresión Python válida, no estás limitado a nombres de variables simples:

x = 10
y = 3
print(f"{x} divided by {y} is {x / y:.2f}")
10 divided by 3 is 3.33

El especificador de depuración = (Python 3.8+)

Añade = después del nombre de la variable para imprimir tanto el nombre de la variable como su valor — muy útil para depuración rápida:

val = 42
result = val * 2
print(f"{val=}, {result=}")
val=42, result=84

Especificadores de formato

Los tres métodos admiten un mini-lenguaje para controlar cómo se muestran los valores. La sintaxis dentro de {} para format() y las f-strings es:

{[value]:[fill][align][sign][width][grouping][.precision][type]}

Alineación y ancho

Usa < (izquierda), > (derecha) o ^ (centro) con un número de ancho:

name = "John"
print(f"|{name:<10}|")   # left-align in a field of width 10
print(f"|{name:>10}|")   # right-align
print(f"|{name:^10}|")   # center
|John      |
|      John|
|   John   |

Puedes especificar un carácter de relleno antes del símbolo de alineación:

print(f"|{'hello':*^15}|")  # fill with * and center
|*****hello*****|

Precisión decimal

pi = 3.14159265
print(f"Pi is approximately {pi:.2f}")   # 2 decimal places
print(f"Pi is approximately {pi:.4f}")   # 4 decimal places
Pi is approximately 3.14
Pi is approximately 3.1416

Formateo de números

price = 1234567.89
print(f"{price:,.2f}")   # comma as thousands separator
print(f"{price:e}")      # scientific notation
1,234,567.89
1.234568e+06

Para mostrar una proporción como porcentaje, usa el especificador de tipo %:

ratio = 0.853
print(f"{ratio:.1%}")
85.3%

Bases enteras

x = 255
print(f"{x:d}")    # decimal   -> 255
print(f"{x:x}")    # hex lower -> ff
print(f"{x:X}")    # hex upper -> FF
print(f"{x:o}")    # octal     -> 377
print(f"{x:b}")    # binary    -> 11111111
255
ff
FF
377
11111111

Los mismos especificadores funcionan con str.format():

print("{:b}".format(255))   # 11111111
print("{:x}".format(255))   # ff

Relleno con ceros

Rellena un entero con un ancho fijo usando ceros a la izquierda con 0 antes del ancho:

print(f"{42:010d}")   # zero-pad to 10 digits
0000000042

Cómo elegir el método adecuado

SituaciónMejor opción
Python 3.6 o más recientef-string
Debe admitir Python 2operador %
Reutilizar la misma cadena de plantillastr.format() con una variable
Construir plantillas en tiempo de ejecuciónstr.format()
Impresión de depuración rápidaf-string con especificador =
Base de código antigua a mantenerUsa el estilo que ya se emplea

Las f-strings son el valor predeterminado recomendado para todo el código nuevo de Python 3. Son más rápidas que str.format() (sin sobrecarga de llamada a método) y más legibles que %.

Práctica

Práctica
Which of the following are correct ways to format strings in Python according to the content on the provided URL?
Which of the following are correct ways to format strings in Python according to the content on the provided URL?
Was this page helpful?