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.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.