HOWTO · Python
String Builder equivalente em Python
Este tutorial demonstra o equivalente da classe StringBuilder em Python
Nesta página
Python não tem uma classe StringBuilder integrada como algumas outras linguagens. Em vez disso, escolha uma abordagem para construir strings conforme a origem das partes: use str.join() para um iterável de strings, + para poucas partes fixas e io.StringIO quando o código escrever as partes incrementalmente. F-strings formatam valores em uma string; não são um buffer de uso geral para uma sequência arbitrária.
As strings em Python são imutáveis: uma operação que altera seu conteúdo produz um valor de string, em vez de modificar a string original no próprio objeto. Isso ajuda a explicar por que acumular repetidamente um resultado crescente pode ser uma prática inadequada em geral, mas não significa que todo uso de + seja lento. Para uma expressão pequena e fixa, a concatenação é clara e prática.
O que significa o equivalente a StringBuilder em Python
Uma API no estilo de StringBuilder é útil quando um programa precisa montar texto a partir de várias partes. Python oferece ferramentas padrão para essa tarefa geral, mas não há uma única classe que deva substituir todas as abordagens. O formato dos dados de entrada e a maneira como o texto é produzido determinam qual ferramenta torna o código mais fácil de ler.
Construir strings a partir de partes com str.join()
Use join() na string separadora quando já tiver um iterável de strings. O separador aparece entre itens adjacentes, sem nenhum separador extra no início ou no fim. Por exemplo, " / ".join(parts) combina os valores usando uma barra cercada por espaços. Todos os itens precisam ser strings; converta os valores que não forem strings antes de juntá-los ou use formatação quando eles devam aparecer como parte de uma mensagem maior.
Execute este exemplo. O código e os rótulos ou resultados exibidos nesta seção permanecem em inglês.
parts = ["docs", "python", "strings"]
path = " / ".join(parts)
print(path)
docs / python / strings
join() é uma opção padrão útil para combinar uma coleção de strings conhecidas. Com ela, o separador fica explícito e não é necessário escrever um loop que aumente repetidamente uma variável de resultado. Isso não garante velocidade em todos os casos; escolha essa abordagem quando a entrada e a intenção corresponderem à tarefa.
Quando a concatenação com + é apropriada
Use + quando o número de partes for pequeno e fixo, como ao combinar uma saudação com um nome ou acrescentar pontuação a um rótulo. A expressão mostra as partes diretamente e costuma ser mais simples do que criar uma coleção só para juntá-la.
Para uma sequência produzida ao longo de muitas iterações de um loop, atribuir repetidamente result = result + piece pode criar sucessivos valores de string e realizar trabalho desnecessário. Prefira reunir as partes em strings e juntá-las uma única vez, ou use StringIO quando cada parte for escrita naturalmente à medida que é produzida. O desempenho real depende do programa e da implementação do Python; evite escolher com base em uma classificação universal sem fundamento.
Usar io.StringIO para escritas incrementais
Quando o código gera texto em etapas, io.StringIO fornece um fluxo de texto em memória com um método write(). Importe-o de io, escreva cada parte em string e depois chame getvalue() para obter a string acumulada. Isso pode deixar mais claro o código orientado à produção de saída quando as partes vêm de ramificações ou etapas diferentes. Cada argumento passado a write() precisa ser uma string. Use um gerenciador de contexto quando isso ajudar a deixar claro o ciclo de vida do fluxo; se precisar do valor completo depois, chame getvalue() antes de sair desse escopo.
O código e os rótulos ou resultados exibidos nesta seção permanecem em inglês.
from io import StringIO
with StringIO() as output:
output.write("Hello")
output.write(", ")
output.write("Python")
message = output.getvalue()
print(message)
Hello, Python
Em geral, não é necessário criar um wrapper próprio. Se a aplicação precisar de um, mantenha o buffer em cada instância para que builders separados não compartilhem estado.
Formatar valores com f-strings
Use uma f-string quando a tarefa for formatar valores em uma string. As expressões entre chaves são avaliadas e convertidas para exibição, o que mantém uma mensagem curta legível. O código e os rótulos ou resultados exibidos nesta seção permanecem em inglês:
name = "Ada"
count = 3
message = f"{name} has {count} tasks."
print(message)
F-strings servem para interpolação, não para acrescentar incrementalmente uma coleção arbitrária de partes. Se os valores estiverem em uma coleção, prepare itens em string e use join(); se o texto for escrito em etapas, considere StringIO. Essa distinção mantém a formatação separada da acumulação.
Escolher a abordagem certa para construir strings
- Escolha
str.join()quando tiver um iterável de strings e quiser um separador entre elas. - Escolha
+para um número pequeno e fixo de partes claramente visíveis. - Escolha
io.StringIOquando o texto for escrito incrementalmente por meio de uma interface semelhante a um fluxo. - Escolha uma f-string para inserir alguns valores em uma mensagem ou em outra string formatada.
Não há uma substituição direta em Python por StringBuilder que sirva para todas as situações. Escolha o método conforme a forma como as partes são fornecidas e converta os valores em strings quando a operação escolhida exigir entradas desse tipo. Essas abordagens oferecem maneiras práticas de construir texto sem recorrer a afirmações genéricas sobre qual método é sempre mais rápido.