Pular para o conteúdo principal

Interpolação e Formatação de textos

Uma das coisas mais úteis de se fazer com texto é a interpolação de variáveis dentro do texto e a formatação de acordo com template predefinido. Interpolação é uma alternativa a concatenação, enquanto a concatenação usa o sinal de + como em "Bruno" + "Rocha" na interpolação usamos templates com posicionamento.

Python oferece 3 maneiras de fazer Interpolação, a primeira e mais antiga delas segue um padrão universal adotado em muitos sistemas e em outras linguagens de programação e utiliza o sinal de % como marcador de template.

%

>>> mensagem = "Olá %s, você é o participante número %d e pode ganhar %f 
pontos."
>>> nome = "Bruno"
>>> numero = 4
>>> pontos = 42.5
>>> print(mensagem % (nome, numero, pontos))
Olá Bruno, você é o participante número 4 e pode ganhar 42.500000 pontos.

Este tipo de formatação usa o % acompanhado de s para str, d para int, ou f para float, e além de demarcar o placeholder onde à substituição irá ocorrer também podemos definir a precisão numérica como em %.2f que significa que queremos imprimir apenas 2 casas decimais do número float.

>>> mensagem = "Olá %s, você é o participante número %d e pode ganhar %.2f 
pontos."
>>> print(mensagem % (nome, numero, pontos))
Olá Bruno, você é o participante número 4 e pode ganhar 42.50 pontos.

E também é possível utilizar parâmetros nomeados.

>>> mensagem = "Olá %(nome)s, você é o participante número %(num)d e pode 
ganhar %(pon).2f pontos."
>>> print(mensagem % {"nome": "Bruno", "num": 4, "pon": 42.5})
Olá Bruno, você é o participante número 4 e pode ganhar 42.50 pontos.

Apesar do uso de % ter caído em desuso no Python3, ainda existem bibliotecas como a logging que ainda utiliza este formato.

format

Esta é a forma preferida para fazer interpolação de textos, pois além de permitir a substituição de variáveis também permite a formatação dos valores, vejamos alguns exemplos:

>>> mensagem = "Olá {}, você é o participante número {} e pode ganhar {}
pontos."
>>> print(mensagem.format(nome, numero, pontos))
Olá Bruno, você é o participante número 4 e pode ganhar 42.5 pontos.

Repare que ao invés de % agora usamos {} para marcar um placeholder e ao invés de % usamos a chamada do método .format do próprio tipo str para passar os valores em sequência.

E também podemos especificar tipos e a precisão numérica usando : e os mesmos marcadores dentro de .

>>> mensagem = "Olá {:s}, você é o participante número {:d} e pode ganhar 
{:.2f} pontos."
>>> print(mensagem.format(nome, numero, pontos))
Olá Bruno, você é o participante número 4 e pode ganhar 42.50 pontos.

Podemos utilizar outras opções de formatação em cada uma das marcações entre {}. Existe toda uma minilinguagem de formatação:

{[[fill]align][sign][#][0][width][grouping_option][.precision][type]}
fill - <any charac­ter>
align - "­<" | "­>" | "­=" | "­^"
sign - "­+" | "­-" | " "
width - digit+
grouping_option - "­_" | "­,"
precision - digit+
type - "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "
s" | "x" | "X" | "%"

Exemplos:

# Centralizar fazendo ocupar exatamente 11 caracteres.

>>> "{:^11}".format("Bruno")
' Bruno '

# A mesma coisa porém alinhado à direita.

>>> "{:>11}".format("Bruno")
' Bruno'

# Agora preenchendo os espaços com outro caractere

>>> "{:*^11}".format("Bruno")
'***Bruno***'

# Definindo tipo e precisão para números

>>> "{:*^11.2f}".format(45.30000041)
'***45.30***'

O site Pyformat https://pyformat.info/ oferece um guia bastante intuitivo para utilizar as opções de formatação. Outra forma mais rápida de obter essa ajuda é abrindo o python e digitando:

help('FORMATTING')

f strings

No Python 3 foi introduzido um atalho bastante útil para usar o format e de uma forma mais natural agora podemos escrever strings que se autoformatam usando as variáveis existentes, o funcionamento respeita as mesmas opções vistas anteriormente, o que muda é só a forma de escrever, ao invés de chamar explicitamente .format() usamos f"texto".

# Texto
>>> nome = "Bruno"
>>> f"{nome:*^11}"
'***Bruno***

# Número
>>> valor = 45.30000041
>>> f"{valor:*^11.2f}"
'***45.30***'

Uma utilidade interessante das f-strings é usar para fazer debugging.

>>> nome = "Bruno"
>>> print(f"{nome=}")
nome='Bruno'

Geralmente usamos: %s para logs .format para templates salvos, por exemplo, para enviar e-mails f-string para todas as outras mensagens do programa

Emojis

print("\U0001F600") print("\U0001F43C") print("\N{watermelon}")