Python: Concatenando strings corretamente

Se você veio de linguagens como JavaScript ou PHP, você pode ter um hábito de concatenar strings da seguinte forma:

nome = “matheus”
print(“olá “+nome+”, seja bem-vindo”)

Apesar de ser simples, o problema dessa abordagem está na forma como o Python lida com as strings. Por baixo dos panos, strings são objetos imutáveis, ou seja, são constantes que não podem ter o seu valor alterado. Quando uma string é modificada o interpretador não modifica o valor da string, e sim cria uma nova já com as alterações.

No CPython (interpretador mais utilizado) uma string é apenas um objeto na memória enquanto uma variável é um ponteiro que aponta para este objeto. Se várias string tem o mesmo conteúdo, elas sempre vão apontar para o mesmo objeto e, desta forma, economizar memória.

>>> var1 = “matheus”
>>> var2 = “matheus”
>>> id(var1)
140669074323808
>>> id(var2)
140669074323808

Isso significa que quando concatenamos strings da forma descrita acima, o interpretador desperdiça memória criando 4 objetos:

  1. olá
  2. matheus
  3. , seja bem-vindo
  4. olá matheus, seja bem-vindo

Como faço isso corretamente então?

Todas as versões do Python

As strings no Python tem um método format que pode ser utilizado para concatenar strings:

nome = “matheus”
print(“olá {} seja bem-vindo”.format(nome))

Essa abordagem não sofre dos problemas de memória mencionados, mas não é muito natural de ser escrita.

Python 3.6

Já faz mais de 6 meses que a versão 3.6 do Python foi lançada e apesar de boa parte da comunidade ainda preferir a 2.7, eu fortemente recomendo essa atualização.

As mudanças no versão você pode ver nesse link. Aqui eu vou comentar sobre uma feature introduzida que são as f-strings.

nome = “matheus”
print(f“olá {nome} seja bem-vindo”)

Colocando um simples f na frente da string, você pode chamar variáveis diretamente (sintaxe muito parecida com Ruby) e ter todas as vantagens do format com um código mais limpo.

Todo esse trabalho para economizar alguns bytes?

…e deixar o código mais limpo também. Python é muito utilizado pra analisar dados e, dependendo do número de operações no script, cada byte economizado e cada milésimo que o código não desperdiça pode gerar um ganho significativo no final.

O objetivo desse texto não é mudar completamente a forma de como você escreve strings no Python, mas sim dar subsídio técnico para quando for preciso otimizar um código.

Like what you read? Give Matheus Cansian a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.