# 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.