# Formatação de _strings_
Em Python 3.6 foi introduzido um novo mecanismo para formatar
_strings_, chamado de _interpolação de strings_. O mecanismo
introduz um novo tipo de expressão, popularmente conhecida como
_f-string_, que permite produzir uma _string_, através da
combinação de várias expressões independentes e uma _string_
modelo. O _repl_ abaixo exemplifica o uso de _f-strings_.
Na linha 4 do código, do lado direito da atribuição, vemos uma
_expressão de interpolação de strings_. Ela consiste em um
literal de _string_ precedido de um `f` -- razão pela qual tais
expressões são conhecidas como _f-strings_. O literal serve como
modelo da _string_ que deve ser produzida. A sintaxe interna para
indicar os valores a serem interpolados é bastante intuitiva:
cada trecho é demarcado por uma expressão entre chaves: `{p1}` e
`{p2}`, no exemplo acima, em que as expressões internas são `p1`
e `p2`. Ao avaliar a _f-string_, em tempo de execução, python
avalia primeiro as expressões internas, converte os valores
resultantes em _strings_ e as combina (ou interpola) ao restante
do literal, produzindo a _string_ final. No exemplo, a _string_
resultante será `Exemplo de interpolação de strings.` porque as
variáveis `p1` e `p2` estão vinculadas aos valores `interpolação`
e `string`, respectivamente.
## Especificadores
A interpolação permite especificar detalhes de como a _string_ de
cada expressão deve ser gerada através de _especificadores_. Para
adicionar especificadores a uma expressão, ela deve ser seguida
de um `:` e dos caracteres especificadores desejados. A seguir
veremos alguns deles.
> Os especificadores para formatação de _strings_ em python são
> vários e podem ser combinados de inúmeras formas diferentes.
> Aqui não pretendo cobrir cada um deles. Sugiro, contudo, que
> todos dêem uma olhada na
> [documentação da linguagem](https://docs.python.org/3/library/string.html#format-specification-mini-language)
> para conhecerem as alternativas disponíveis.
**Especificadores para inteiros** Há vários especificadores que
se aplicam a valores inteiros. Os mais importantes, contudo, são
os que permitem determinar: 1) se a representação deve ser
decimal (`d`), binária (`b`), octal (`o`) ou hexadecimal (`x` ou
`X`); 2) o tamanho mínimo da _string_; 3) se a representação deve
ou não ser precedida de zeros; e 4) se devem ser alinhados à
direita ou à esquerda. O _repl_ abaixo dá exemplos de cada um
deles.
No exemplo acima, todas as _strings_ são iniciadas por `«` e
terminadas por `»`, para tornar mais fácil o entendimento do
efeito do especificador na _string_ produzida. Alguns aspectos
merecem atenção:
1. Alguns especificadores podem ser combinados. É o caso, no exemplo
acima, do especificador `:<10b` que especifica que o número
deve ser representado em uma _string_ com 10 caracteres,
alinhado à esquerda e em binário.
2. Os especificadores só podem ser combinados em certa ordem.
Para saber a ordem permitida, leia a documentação da chamada
[_mini-linguagem de especificação de formato_](https://docs.python.org/3/library/string.html#format-specification-mini-language).
3. O especificador `d` é opcional. Se nenhuma indicação for dada
quanto à base da representação, Python usará decimal por
_default_.
> O especificador da base é obrigatório quando se usa o
> operador clássico de formatação de _strings_ `%`.
**Especificadores para números de ponto flutuante** Se o
resultado da operação for um número de ponto flutuante, pode-se
usar o especificador `f` para produzir uma _string_ com uma
representação decimal de ponto fixo. Se nenhum especificador
adicional for usado, uma representação de ponto fixo com 6 casas
decimais será produzida. Outros especificadores permitem
controlar: 1) o tamanho mínimo da _string_; 2) o número de casas
decimais; 3) o preenchimento antes ou depois com 0s (ou qualquer
outro caractere); 4) o alinhamento à esquerda ou direita. O
_repl_ abaixo exemplifica vários desses especificadores.
**Especificadores para _strings_** Finalmente, também há
especificadores para controlar a formatação de _strings_. O
especificador base é `s` (este é o tipo _default_ para formatação
de _strings_ e pode ser omitido). Se for usado sem nenhum
especificador adicional, a _string_ produzida pela expressão
interna é copiada sem alteração. Os principais especificadores
permitem especificar: 1) o tamanho mínimo; 2) o alinhamento;
3) o caractere de preenchimento; e 4) o truncamento da _string_.
O _repl_ abaixo demonstra o efeito desses especificadores.