Se você já precisou escrever uma string multilinha dentro de uma função ou classe em Python, sabe que a situação fica estranha rápido.
A PEP 822 propõe as d-strings (de dedent) para o Python 3.15, uma nova sintaxe que remove indentação automaticamente de strings multilinhas. Simples assim.
O problema que elas resolvem
Imagine que você precisa montar um texto dentro de uma função:
|
|
As opções que temos hoje são ruins:
- Sem indentação — o código fica visualmente quebrado
- Concatenação de strings — verboso e fácil de errar
textwrap.dedent()— funciona, mas tem custo em runtime, não é compatível com t-strings e exige o"""\feio na abertura
As d-strings resolvem tudo isso com uma sintaxe nativa.
Como funciona
Basta adicionar o prefixo d antes das aspas triplas:
|
|
O resultado é o mesmo texto sem a indentação extra, sem chamada de função em runtime.
Regras principais
- Só funciona com aspas triplas (
"""ou''') - O conteúdo deve começar na linha seguinte à abertura
- A indentação das aspas de fechamento determina quanto é removido
- Pode ser combinado com outros prefixos:
f,r,b,t(em qualquer ordem)
A indentação do fechamento importa
O quanto é removido depende de onde você coloca as aspas de fechamento:
|
|
Isso dá controle fino sobre o resultado final, sem precisar de nenhuma função auxiliar.
Combinando com outros prefixos
As d-strings funcionam com todos os outros prefixos que você já conhece:
|
|
Por que não usar textwrap.dedent() mesmo?
A função existe e funciona, mas tem limitações reais:
textwrap.dedent() |
d-strings | |
|---|---|---|
| Custo em runtime | Sim | Não |
| Compatível com t-strings | Não | Sim |
| Considera fechamento | Não | Sim |
| Sintaxe limpa | Regular | Sim |
A maior vantagem prática é a compatibilidade com as t-strings (PEP 750, Python 3.14), que são avaliadas em tempo de compilação e não aceitam processamento posterior com dedent.
Status atual
A PEP 822 ainda é uma proposta em rascunho (Draft), direcionada ao Python 3.15. A implementação de referência já existe (methane/cpython#108), mas ainda precisa passar pelo processo de aprovação oficial.
Não é nada para usar em produção agora, mas é uma adição bastante pragmática ao que o Python já oferece. Sem mágica, sem overhead, só uma sintaxe mais limpa para um problema que todo programador Python já enfrentou.