Menu

f-Strings em Python: formatação, expressões e specs de número

Um guia prático para f-strings em Python — embutindo variáveis e expressões, formatando números e datas, e quando recorrer aos estilos antigos.

O formato que você de fato vai usar

f-strings são o jeito padrão do código Python moderno embutir valores em texto. Coloque um f na frente da aspa de abertura, e qualquer coisa em {...} vira uma expressão viva:

main.py
Output
Click Run to see the output here.

Três coisas para notar. O prefixo f transforma o literal inteiro num template. As chaves são os pontos de substituição. E a expressão dentro das chaves é avaliada no momento em que print roda, não quando a string foi escrita.

Você vai escrever f-strings muito mais do que qualquer outro estilo de formatação. São mais curtas do que "Hello, " + name + ".", mais claras do que "Hello, %s." % name e mais flexíveis do que .format().

Qualquer coisa que avalie pode ir dentro

As chaves não se restringem a nomes de variável. Qualquer expressão Python vale:

main.py
Output
Click Run to see the output here.

Chamadas de método, indexação, aritmética, expressões condicionais — tudo bem. A única regra: mantenha o que está entre as chaves curto. Se você está escrevendo um cálculo de três linhas dentro de um placeholder, calcule numa variável nomeada primeiro e solte o nome ali.

Formatando números

Dois pontos depois da expressão abre uma format spec — uma minilinguagem para controlar como o valor é exibido:

main.py
Output
Click Run to see the output here.

Um guia rápido do que cada pedaço faz:

  • .2f — float, dois dígitos depois do ponto. Arredonda para exibição.
  • , — vírgula como separador de milhar. Funciona para int e float.
  • .1% — multiplica por 100 e adiciona %. Ótimo para razões e taxas.
  • .2e — notação científica com dois dígitos decimais.

Você pode combinar. f"{total:,.2f}""1,234.57".

Preenchimento, largura e alinhamento

Para alinhar colunas de saída:

main.py
Output
Click Run to see the output here.

<10 significa "alinhe à esquerda, preencha para pelo menos 10 caracteres". >5 significa "alinhe à direita, preencha para 5". Você também pode usar ^ para centralizado.

Preencha com algo diferente de espaços colocando o caractere de preenchimento antes da flag de alinhamento:

main.py
Output
Click Run to see the output here.

Formatando datas

A mesma sintaxe {valor:spec} funciona para objetos datetime:

main.py
Output
Click Run to see the output here.

A spec depois dos dois pontos é uma string de formato strftime. Todo código % disponível para strftime funciona aqui — cobrimos em detalhe na página de datetime.

O truque do = para debug

Uma das features de nicho mais úteis: coloque = depois da expressão e o Python imprime a expressão-fonte e o valor:

main.py
Output
Click Run to see the output here.

Você ganha count=7, price=19.99, count * price=139.93. É um print("count =", count) completo em três caracteres. Vale lembrar da próxima vez que estiver debugando e quiser jogar alguns valores na tela.

Escapando chaves

Se você precisa de um { ou } literal na saída, duplique:

main.py
Output
Click Run to see the output here.

Chaves simples abrem uma expressão; {{ e }} representam { e } na saída.

f-strings multilinha

f-strings se dão bem com aspas triplas, o que ajuda quando você está construindo pequenos templates inline:

main.py
Output
Click Run to see the output here.

Você também pode quebrar uma f-string longa em vários literais de string adjacentes — o Python concatena automaticamente:

main.py
Output
Click Run to see the output here.

Quando os estilos antigos ainda aparecem

Você vai esbarrar em dois estilos antigos de formatação em código existente:

main.py
Output
Click Run to see the output here.

Os três produzem a mesma saída. f-strings vencem em legibilidade em nove casos de dez. Recorra a .format() quando precisa construir um template uma vez e aplicar muitas; use % só quando está mantendo código antigo que já usa.

Para o que não são boas

Duas situações pedem ferramenta diferente.

Construir queries SQL. Nunca interpole entrada de usuário numa string SQL com uma f-string. Use queries parametrizadas da sua biblioteca de banco de dados. Uma f-string ali é como acontece SQL injection.

Construir texto de UI traduzido. Se seu app suporta várias línguas, você quer um template que ferramentas de tradução externas consigam captar — geralmente o _(...) do gettext ou um helper específico do framework. Uma f-string embute a estrutura no código-fonte, o que torna tradução muito mais difícil.

Para todo o resto — logs, saída de console, construção de URL, construção de strings de config, formatação de números para exibição — f-strings são a resposta certa.

Próxima: números e booleanos

f-strings ganham muito uso formatando números, então vale conhecer os tipos numéricos um pouco mais a fundo. É o próximo.

Perguntas frequentes

O que é uma f-string em Python?

Uma f-string é um literal de string com prefixo f, onde qualquer coisa dentro de {...} é substituída em tempo de execução pelo valor da expressão. f"Hello, {name}" encaixa o valor atual de name na string.

Quando f-strings foram adicionadas ao Python?

Python 3.6. Toda versão moderna do Python suporta, então você pode usar f-strings em qualquer lugar que escreva Python 3 hoje. Estilos antigos de formatação (% e .format()) ainda funcionam, mas leem menos limpo na maioria dos casos.

Como formato um número com 2 casas decimais em Python?

Use uma spec de formato depois de dois pontos dentro das chaves: f"{price:.2f}". O .2f significa 'float com dois dígitos depois do ponto decimal'. Arredonda o valor exibido; o número original não muda.

Posso colocar qualquer expressão dentro de uma f-string?

Sim — aritmética, chamadas de método, chamadas de função, expressões condicionais. f"{name.upper()}" e f"{price * 1.2:.2f}" funcionam os dois. Mantenha expressões curtas; se o código dentro das chaves ficar complicado, calcule numa variável primeiro.

Aprenda a programar com o Coddy

COMEÇAR