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

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 é chamado de interpolação literal de strings.

Por que precisamos de f-strings?

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

  • Formatação com % – ótimo para formatação simples, mas suporte limitado apenas para strings, inteiros e números decimais. Não podemos usá-lo com objetos.

  • Template Strings – é muito básico. Template strings trabalham apenas com argumentos de palavras-chave como um dicionário. Não podemos chamar nenhuma função e os argumentos devem ser strings.
  • String format() – A função String do Python format() foi introduzida para superar os problemas e características limitadas da formatação de %- e 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 do 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 do Python são introduzidas para terem uma sintaxe mínima para formatação de strings. As expressões são avaliadas em tempo de execução. Se estiver usando o Python 3.6 ou uma versão superior, você deve usar f-strings para todas as suas necessidades de formatação de strings.

Exemplos de f-strings em 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

# A f-string já foi avaliada e não mudará agora
print(f_string)

Resultado:

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 declaraçõ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 da f-string permanece o mesmo mesmo depois que as variáveis ‘nome’ e ‘idade’ 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}')

Resultado:

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

Resultado:

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

Saída:

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

Saída: 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 de 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)}')

Saída:

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

Saída:

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 de Python 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