Python f-strings – PEP 498 – Interpolação de String Literal

As f-strings ou strings formatadas em Python são a nova maneira de formatar strings. Essa funcionalidade foi introduzida no Python 3.6 sob o PEP-498. Também é chamada de \textit{literal string interpolation} (interpolação literal de strings).

Por que precisamos de f-strings?

O Python oferece várias maneiras de formatar uma string. Vamos dar uma rápida olhada nelas e quais são os problemas que elas têm.

  • % formatação – ótimo para formatação simples, mas suporte limitado para strings, inteiros, duplos apenas. Não podemos usá-lo com objetos.

  • Template Strings – é muito básico. Template strings funcionam com argumentos de palavra-chave como dicionário apenas. Não podemos chamar nenhuma função e os argumentos devem ser strings.

  • String format() – A função format() de String em Python foi introduzida para superar os problemas e as características limitadas da formatação %- e das strings de modelo. No entanto, é muito verbosa. Vamos ver sua verbosidade com um exemplo simples.

    >>> idade = 4 * 10
    >>> 'Minha idade é {idade}.'.format(idade=idade)
    'Minha idade é 40.'
    

As f-strings em Python funcionam quase da mesma forma que a função format(), mas removem toda a verbosidade que a função format() tem. Vamos ver como podemos formatar facilmente a string acima usando f-strings.

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

As f-strings em Python foram introduzidas para ter uma sintaxe mínima para formatação de strings. As expressões são avaliadas em tempo de execução. Se estiver utilizando o Python 3.6 ou versão superior, você deve usar f-strings para todas as suas necessidades de formatação de strings.

Exemplos de f-strings Python

Vamos dar uma olhada em um exemplo simples 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

# f_string já foi avaliado e não mudará agora
print(f_string)

Saída:

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

O Python executa as instruções uma por uma e uma vez que as expressões f-string são avaliadas, elas não mudam mesmo se o valor da expressão mudar. É por isso que nos trechos de código acima, o valor de f_string permanece o mesmo mesmo depois que as variáveis ‘name’ e ‘age’ mudaram na parte posterior do programa.

1. f-strings com expressões e conversões

Podemos usar f-strings para converter datetime para um formato específico. Também podemos executar expressões matemáticas em 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}')

Saída:

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 suportam strings raw

Também podemos criar strings raw usando f-strings.

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

Saída:

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

3. f-strings com objetos e atributos

Também podemos acessar atributos de objetos em f-strings.

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}')

Resultado:

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

4. f-strings chamando funções

Também podemos chamar funções na formatação de f-strings.

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


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

Resultado: Soma(10,20) = 30

5. f-string com espaços em branco

Se houver espaços em branco no início ou no final da expressão, eles são ignorados. Se a parte da string literal contiver espaços em branco, eles são preservados.

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

6. Expressões lambda com f-strings

Também podemos usar expressões lambda dentro de expressões f-string.

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

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

Resultado:

Lambda Example: 20.45
Lambda Square Example: 25

7. Exemplos diversos de f-strings

Vamos dar uma olhada em alguns exemplos diversos de f-strings em Python.

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

Resultado:

quoted string
{ 40 }
{40}

Isso é tudo para strings formatadas em Python, também conhecidas como f-strings.

Você pode conferir o script completo em Python e mais exemplos em nosso Repositório no GitHub.

Referência: PEP-498, Documentação Oficial

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