Pular para o conteúdo

Como Interpolar Strings Facilmente no Python

[

F-strings do Python para interpolação de strings e formatação

por Joanna Jablonski, 18 de outubro de 2023

As f-strings do Python oferecem uma maneira rápida de interpolar e formatar strings. Elas são legíveis, concisas e menos propensas a erros do que as ferramentas tradicionais de interpolação e formatação de strings, como o método .format() e o operador de módulo (%). Uma f-string também é um pouco mais rápida que essas ferramentas!

No final deste tutorial, você entenderá por que as f-strings são uma ferramenta tão poderosa que você deve aprender e dominar como desenvolvedor Python.

Neste tutorial, você aprenderá como:

  • Interpolar valores, objetos e expressões em suas strings usando f-strings
  • Formatar f-strings usando a mini-linguagem de formatação de strings do Python
  • Aproveitar algumas funcionalidades legais das f-strings no Python 3.12 e além
  • Decidir quando usar ferramentas tradicionais de interpolação em vez de f-strings

Para aproveitar ao máximo este tutorial, você deve estar familiarizado com o tipo de dado string em Python. Também é útil ter experiência com outras ferramentas de interpolação de strings, como o operador de módulo (%) e o método .format().

Interpolação e formatação de strings antes do Python 3.6

Antes do Python 3.6, você tinha duas ferramentas principais para interpolar valores, variáveis e expressões dentro de literais de string:

  1. O operador de interpolação de string (%), ou operador de módulo
  2. O método .format()

Aqui estão dois exemplos:

name = "Alice"
age = 25
message = "My name is %s and I'm %d years old." % (name, age)
print(message) # Output: My name is Alice and I'm 25 years old.
name = "Bob"
age = 30
message = "My name is {} and I'm {} years old.".format(name, age)
print(message) # Output: My name is Bob and I'm 30 years old.

Essas são formas válidas de interpolar valores em strings, mas existem algumas desvantagens. Por exemplo, com o operador de módulo, você precisa lembrar qual é o tipo de cada variável e usar o código de formato adequado (%s para string, %d para inteiro, etc.). Já com o método .format(), você precisa fornecer os índices ou nomes das variáveis dentro da string e passar os valores correspondentes na chamada do método.

Fazendo interpolação de strings com f-strings no Python

A partir do Python 3.6, as f-strings foram introduzidas como uma nova sintaxe para interpolar e formatar strings. As f-strings permitem que você insira diretamente expressões Python dentro de uma string prefixada com um f. Aqui está um exemplo:

name = "Alice"
age = 25
message = f"My name is {name} and I'm {age} years old."
print(message) # Output: My name is Alice and I'm 25 years old.

Com as f-strings, você pode inserir valores e objetos diretamente dentro da string, sem precisar se preocupar com o tipo de dado ou a ordem das variáveis. As expressões Python entre chaves ({}) são avaliadas em tempo de execução e o resultado é interpolado na string final.

Você também pode realizar formatação adicional dentro das chaves, usando a mini-linguagem de formatação de strings do Python. Aqui está um exemplo:

name = "Alice"
age = 25
message = f"My name is {name.upper()} and I'm {age * 2} years old."
print(message) # Output: My name is ALICE and I'm 50 years old.

Neste exemplo, utilizamos os métodos .upper() e multiplicação * para formatar o valor da variável name e age dentro da string.

Formatando strings com f-strings do Python

As f-strings também suportam formatação mais avançada usando a mini-linguagem de formatação de strings do Python. Com essa linguagem, você pode controlar a precisão numérica, o alinhamento, o preenchimento, o sinal e outras opções de formatação. Veja um exemplo:

number = 3.14159265359
message = f"The value of pi is approximately {number:.2f}."
print(message) # Output: The value of pi is approximately 3.14.

Neste exemplo, usamos a especificação de precisão numérica .2f para limitar o número de casas decimais do valor da variável number.

Outras funcionalidades relevantes das f-strings

Além da interpolação e formatação básicas, as f-strings do Python também possuem algumas funcionalidades adicionais interessantes.

Usando as representações de string de um objeto em f-strings

Você pode usar a representação de string de um objeto dentro de uma f-string. Para isso, basta fornecer uma expressão !s dentro das chaves. Veja um exemplo:

class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Person: {self.name}"
person = Person("Alice")
message = f"{person!s}"
print(message) # Output: Person: Alice

Neste exemplo, criamos uma classe Person com um método __str__ que retorna uma representação de string formatada para a instância. Na f-string, usamos a expressão !s para inserir a representação de string da instância person.

Expressões auto-explicativas para depuração

As f-strings podem conter expressões auto-explicativas para ajudar na depuração do código. Basta adicionar uma expressão entre chaves = dentro da f-string. Veja um exemplo:

result = 42
message = f"The result is {result=}!"
print(message) # Output: The result is result=42!

Neste exemplo, interpolamos a expressão result= seguida pelo valor da variável result dentro da string. Isso torna o resultado auto-explicativo e facilita a identificação de erros durante a depuração.

Comparando o desempenho: f-strings vs. ferramentas tradicionais

As f-strings são um pouco mais rápidas do que as ferramentas tradicionais de interpolação e formatação de strings, como o operador de módulo (%) e o método .format(). No entanto, a diferença de desempenho pode ser negligenciável na maioria dos casos. É importante escolher a sintaxe que melhor se adapta ao seu código e que seja mais legível e fácil de manter.

Atualizando f-strings: Python 3.12 e além

O Python 3.12 e versões posteriores introduziram algumas melhorias nas f-strings.

Usando aspas

Antes do Python 3.12, era necessário escapar as aspas dentro das f-strings usando uma barra invertida (\). No Python 3.12 e além, você pode usar as duplas aspas simples ('') ou aspas duplas ("") dentro de uma f-string sem escapar:

name = "Alice"
message = f'This is Alice\'s book.'
print(message) # Output: This is Alice's book.

Usando barras invertidas

Antes do Python 3.12, era necessário escapar as barras invertidas dentro das f-strings utilizando duas barras invertidas (\\). No Python 3.12 e além, você pode usar uma única barra invertida sem necessidade de escapar:

path = r'C:\Users\Alice\Documents'
message = f'The file path is: {path}'
print(message) # Output: The file path is: C:\Users\Alice\Documents

Escrevendo comentários inline

No Python 3.12 e versões posteriores, você pode escrever comentários inline dentro de uma f-string, prefixando a expressão com um #. Isso é especialmente útil para fins de depuração:

name = "Alice"
message = f"Welcome, {name=}! It's nice to meet you." # This is an inline comment
print(message) # Output: Welcome, name='Alice'! It's nice to meet you.

Decifrando mensagens de erro das f-strings

Antes do Python 3.12, as mensagens de erro das f-strings podem ser difíceis de entender. No Python 3.12 e além, a mensagem de erro agora contém sugestões claras para corrigir o problema:

x = 10
message = f"The value of y is {x}" # Omitting the equals sign on purpose
print(message) # Output: SyntaxError: cannot use assignment expressions with f-string

Neste exemplo, omitimos o sinal de igual propositalmente e o erro retornado sugere que devemos adicionar o sinal de igual.

Usando ferramentas tradicionais de formatação de strings em vez de f-strings

Apesar das vantagens das f-strings do Python, há casos em que as ferramentas tradicionais de formatação de strings ainda podem ser mais adequadas.

Interpolação de dicionário

Se você precisar interpolar um dicionário em uma string, as f-strings não fornecem uma sintaxe fácil para isso. Nesses casos, é melhor usar o método .format() ou o operador de módulo (%).

Avaliação preguiçosa em logs

Se você estiver trabalhando com logs que podem ser custosos de serem gerados, as f-strings podem ser menos eficientes do que a concatenação de strings ou o uso do método .format(), pois as f-strings avaliam as expressões de forma antecipada.

Consultas de banco de dados SQL

Para realizar consultas de banco de dados SQL, as f-strings não fornecem uma sintaxe que garanta a segurança contra injeção de SQL. Nesses casos, é melhor usar uma biblioteca específica para fazer a formatação das queries.

Internacionalização e localização

Se o seu código precisar lidar com diferentes idiomas e regiões, onde a formatação de datas, números e moedas pode variar, as f-strings podem não ser suficientes para garantir a formatação correta. Nesses casos, é melhor usar bibliotecas específicas de internacionalização e localização, como o módulo locale e o pacote babel.

Convertendo strings antigas em f-strings automaticamente

Se você tiver muitas strings antigas que estão sendo interpoladas e formatadas de forma tradicional, pode ser um trabalho árduo convertê-las manualmente para f-strings. Felizmente, existem ferramentas como o 2to3 e o futurize que podem ajudar a fazer essa conversão de forma automática.

Conclusão

As f-strings do Python são uma adição poderosa à linguagem que simplifica a interpolação e formatação de strings. Elas oferecem uma sintaxe concisa, legível e de alto desempenho. No entanto, é importante considerar as circunstâncias específicas de cada caso e escolher a melhor ferramenta para o trabalho. Com este tutorial, você está pronto para aproveitar ao máximo as f-strings em seus projetos Python. Experimente e divirta-se!