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:
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:
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:
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}" dá "1,234.57".
Preenchimento, largura e alinhamento
Para alinhar colunas de saída:
<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:
Formatando datas
A mesma sintaxe {valor:spec} funciona para objetos datetime:
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:
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:
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:
Você também pode quebrar uma f-string longa em vários literais de string adjacentes — o Python concatena automaticamente:
Quando os estilos antigos ainda aparecem
Você vai esbarrar em dois estilos antigos de formatação em código existente:
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.