Cadenas f de Python – PEP 498 – Interpolación literal de cadenas

Python f-strings o cadenas formateadas son la nueva forma de dar formato a las cadenas. Esta característica se introdujo en Python 3.6 bajo PEP-498. También se llama interpolación de cadena literal.

¿Por qué necesitamos f-strings?

Python proporciona diversas formas de dar formato a una cadena. Veámoslas rápidamente y cuáles son los problemas que tienen.

  • Formateo con % – excelente para formatos simples pero con soporte limitado para cadenas, solo enteros y decimales. No se puede utilizar con objetos.

  • Cadenas de plantilla – es muy básico. Las cadenas de plantilla funcionan con argumentos de palabra clave como un diccionario solamente. No se nos permite llamar a ninguna función y los argumentos deben ser cadenas.

  • Formato de cadenas – La función de formato de cadena de Python fue introducida para superar los problemas y las características limitadas de la formación de cadenas con % y cadenas de plantillas. Sin embargo, es demasiado verboso. Veamos su verbosidad con un ejemplo simple.

    >>> edad = 4 * 10
    >>> 'Mi edad es {age}.'.format(age=edad)
    'Mi edad es 40.'
    

Las f-cadenas de Python funcionan casi de manera similar a la función format() pero eliminan toda la verbosidad que tiene la función format(). Veamos qué tan fácilmente podemos formatear la cadena anterior usando f-cadenas.

>>> f'My age is {age}'
'My age is 40.'

Las f-cadenas de Python se introdujeron para tener una sintaxis mínima para el formateo de cadenas. Las expresiones se evalúan en tiempo de ejecución. Si estás utilizando Python 3.6 o una versión superior, deberías usar f-cadenas para todos tus requisitos de formateo de cadenas.

Ejemplos de f-strings en Python

Vamos a ver un ejemplo simple de f-strings.

name = 'Pankaj'
age = 34

f_string = f'My Name is {name} and my age is {age}'

print(f_string)
print(F'My Name is {name} and my age is {age}')  # f and F are same

name = 'David'
age = 40

# La cadena f ya está evaluada y no cambiará ahora
print(f_string)

Salida:

My Name is Pankaj and my age is 34
My Name is Pankaj and my age is 34
My Name is Pankaj and my age is 34

Python ejecuta las declaraciones una por una y una vez que las expresiones f-string son evaluadas, no cambian incluso si el valor de la expresión cambia. Es por eso que en los fragmentos de código anteriores, el valor de f_string permanece igual incluso después de que las variables ‘nombre’ y ‘edad’ hayan cambiado en la última parte del programa.

1. f-strings con expresiones y conversiones

Podemos usar f-strings para convertir datetime a un formato específico. También podemos ejecutar expresiones matemáticas en f-strings.

from datetime import datetime

name = 'David'
age = 40
d = datetime.now()

print(f'Age after five years will be {age+5}')  # age = 40
print(f'Name with quotes = {name!r}')  # name = David
print(f'Default Formatted Date = {d}')
print(f'Custom Formatted Date = {d:%m/%d/%Y}')

Salida:

Age after five years will be 45
Name with quotes = 'David'
Default Formatted Date = 2018-10-10 11:47:12.818831
Custom Formatted Date = 10/10/2018

2. f-strings admiten cadenas en bruto

También podemos crear cadenas en bruto usando f-strings.

print(f'Default Formatted Date:\n{d}')
print(fr'Default Formatted Date:\n {d}')

Salida:

Default Formatted Date:
2018-10-10 11:47:12.818831
Default Formatted Date:\n 2018-10-10 11:47:12.818831

3. cadenas f con objetos y atributos

También podemos acceder a los atributos del objeto en las cadenas f.

class Employee:
    id = 0
    name = ''

    def __init__(self, i, n):
        self.id = i
        self.name = n

    def __str__(self):
        return f'E[id={self.id}, name={self.name}]'


emp = Employee(10, 'Pankaj')
print(emp)

print(f'Employee: {emp}\nName is {emp.name} and id is {emp.id}')

Salida:

E[id=10, name=Pankaj]
Employee: E[id=10, name=Pankaj]
Name is Pankaj and id is 10

4. cadenas f llamando a funciones

También podemos llamar a funciones en el formato de cadenas f.

def add(x, y):
    return x + y


print(f'Sum(10,20) = {add(10, 20)}')

Salida: Suma(10,20) = 30

5. cadena f con espacios en blanco

Si hay espacios en blanco al principio o al final de la expresión, se ignoran. Si la parte de cadena literal contiene espacios en blanco, entonces se conservan.

>>> age = 4 * 20
>>> f'   Age = {  age   }  '
'   Age = 80  '

6. Expresiones lambda con cadenas f

También podemos usar expresiones lambda dentro de las expresiones de cadenas f.

x = -20.45
print(f'Lambda Example: {(lambda x: abs(x)) (x)}')

print(f'Lambda Square Example: {(lambda x: pow(x, 2)) (5)}')

Salida:

Lambda Example: 20.45
Lambda Square Example: 25

7. ejemplos varios de f-strings

Vamos a ver algunos ejemplos varios de f-strings en Python.

print(f'{"quoted string"}')
print(f'{{ {4*10} }}')
print(f'{{{4*10}}}')

Resultado:

quoted string
{ 40 }
{40}

Eso es todo para las cadenas formateadas en Python, también conocidas como f-strings.

Puedes consultar el script completo de Python y más ejemplos en nuestro Repositorio en GitHub.

Referencia: PEP-498, Documentación Oficial

Source:
https://www.digitalocean.com/community/tutorials/python-f-strings-literal-string-interpolation