formatação de strings
f-strings
A formatação de strings com f-strings em Python é uma maneira moderna e poderosa de criar strings formatadas. As f-strings permitem que você insira valores de variáveis diretamente em uma string, facilitando a leitura e a manutenção do código.
Para criar uma f-string, coloque um f
ou F
antes das aspas de abertura da string. Em seguida, coloque as variáveis desejadas entre chaves {}
dentro da string. As variáveis serão substituídas pelos seus valores correspondentes durante a execução.
Padding em strings: O padding em strings permite adicionar espaços em branco ou caracteres específicos para manter a string com um tamanho fixo.
>
: Adiciona espaços à esquerda.<
: Adiciona espaços à direita.^
: Adiciona espaços ao centro.
Exemplo:
var = "ABC"
print(f"{var}") # "ABC"
print(f"{var: >10}") # " ABC"
print(f"{var: <10}") # "ABC "
print(f"{var: ^10}") # " ABC "
Formatação de números:
Para formatar números com f-strings, você pode especificar o número de casas decimais para números de ponto flutuante usando :.nf
, onde n
é o número de casas decimais desejado.
Exemplo:
print(f"{3.1415:.2f}") # 3.14
Além disso, você pode usar o separador de milhar em números inteiros adicionando ,
após o :
.
Exemplo:
print(f"{100_000_000:,}") # 100,000,000
Mostrar o sinal de números:
Você pode forçar o sinal de números a ser exibido usando :+
antes do f
.
Exemplo:
print(f"{10:+}") # +10
Conversão de decimal para hexadecimal:
Você pode converter números decimais para hexadecimal usando :x
ou :X
após o f
. :x
produzirá letras minúsculas em hexadecimal e :X
produzirá letras maiúsculas.
Exemplo:
print(f"1500 em hexadecimal é {1500:08x}") # 1500 em hexadecimal é 000005dc
print(f"1500 em hexadecimal é {1500:08X}") # 1500 em hexadecimal é 000005DC
Conversion flags: Você pode usar os conversion flags para invocar métodos especiais para formatar os valores:
!r
: Utiliza o método__repr__()
para obter a representação do objeto.!s
: Utiliza o método__str__()
para obter a representação do objeto em formato de string.!a
: Utiliza o métodoascii()
para obter a representação do objeto com escape de caracteres não ASCII.
Exemplo:
valor = "Olá mundo"
print(f"{valor!r}") # 'Olá mundo'
print(f"{valor!s}") # Olá mundo
print(f"{valor!a}") # 'Ol\\xe1 mundo'
As f-strings são uma maneira poderosa de formatar strings de forma mais legível e flexível em Python, e geralmente são preferíveis em relação à interpolação com %
ou ao método .format()
. Elas tornam a escrita de strings formatadas mais eficiente e menos propensa a erros.
Função:
format
A string é um objeto no Python, logo ela possui atributos e métodos, como por exemplo o método format()
.
O método format()
é responsável por substituir a expressão {}
por um valor passado no argumento dele. Em caso de ter vários argumentos, a substituição é feito na ordem que os os argumentos são definidos.
a = "A"
b = "B"
c = "C"
formato = "a={} b={} c={}".format(a, b, c)
print(formato) # a=A b=B c=C
É possível formatar casas decimais de um número com esse método a partir da seguinte notação:
n = 3.1415
formato = "número={:.2f}".format(n)
print(formato)
# número=3.14
OBS:
2
indica o número de casas decimais desejadas na formatação ef
representa a formatação de umfloat
Há outras formas de referenciar os valores na formatação, além da ordem dos argumentos:
-
Índices: por padrão a contagem dos índices no Python é iniciada no 0
a = "A" b = "B" c = "C" formato = "a={0} b={1} c={2}".format(a, b, c) print(formato) # a=A b=B c=C
-
Parâmetro nomeado: atribuir um rótulo para cada valor definido no argumento do método
a = "A" b = "B" c = "C" formato = "a={0} b={valor2} c={valor3}".format( a, valor2=b, valor3=c ) print(formato) # a=A b=B c=C
OBS: na utilização de parâmetros nomeados, é obrigatório utilizar esse padrão para os parâmetros posteriores
a = "A" b = "B" c = "C" formato = "a={valor1} b={valor2} c={2}".format( valor1=a, valor2=b, c ) print(formato) # Error
Interpolação de strings com ”%”
A interpolação de string com o operador %
em Python é uma das formas mais antigas de formatar strings. Ela permite inserir valores em uma string usando placeholders %
que serão substituídos pelos valores fornecidos posteriormente.
A sintaxe da interpolação de string com %
é a seguinte:
"<placeholder 1> <placeholder 2>" % (<valor 1>, <valor 2>)
Aqui está uma explicação dos placeholders mais comuns:
-
%s
: É usado para substituir uma string. -
%d
ou%i
: São usados para substituir números inteiros. -
%.<número de casas decimais>f
: É usado para substituir números de ponto flutuante com o número especificado de casas decimais. -
%<número de dígitos>x
: É usado para substituir valores inteiros em formato hexadecimal, com letras minúsculas (abcdef0123456789
). -
%<número de dígitos>X
: É usado para substituir valores inteiros em formato hexadecimal, com letras maiúsculas (ABCDEF0123456789
).
Exemplos:
nome = "Luiz"
preco = 1000.95897643
print("%s, o preço é R$%.2f" % (nome, preco))
# Saída: Luiz, o preço é R$1000.96
Neste exemplo, a string "%s, o preço é R$%.2f"
contém dois placeholders: %s
para a string nome
e %.2f
para o valor de ponto flutuante preco
. O valor %s
é substituído por “Luiz” e o valor %.2f
é substituído por “1000.96” (o número formatado com duas casas decimais).
num = 15
print("O hexadecimal de %d é %04x" % (num, num))
# Saída: O hexadecimal de 15 é 000f
Neste exemplo, temos dois placeholders na string: %d
para o número inteiro num
e %04x
para a representação hexadecimal do número inteiro num
. O valor %d
é substituído por “15” e o valor %04x
é substituído por “000f” (formato hexadecimal com 4 dígitos, preenchido com zeros à esquerda).
Apesar de funcional, a interpolação com %
tem algumas limitações e desvantagens. Ela não é tão legível quanto outras formas de formatação de strings, como as f-strings ou o método .format()
. Portanto, é recomendado utilizar as f-strings ou .format()
para formatar strings, pois elas oferecem mais recursos e são mais fáceis de ler e manter. A interpolação com %
ainda é suportada por questões de compatibilidade com versões anteriores do Python, mas seu uso está sendo gradualmente substituído pelas f-strings e .format()
.