Ir para conteúdo
Fórum Script Brasil
  • 0

Otimizar função que retorna string formatada


Rafael do Espirito Santo

Pergunta

Olá pessoal!

Sou novo em python e tenho em minhas mão a missão de otimizar um programa em python que trata muitas linhas de texto.

A princípio, gostaria de saber se existe uma maneira de otimizar as funções que apresento no código abaixo.

def branco_dir(texto,tamanho):

brancos=tamanho-len(texto)

return (texto+(brancos*' '))

def zero_esq(texto,tamanho):

zeros=tamanho-len(texto)

return ((zeros*'0')+texto)

texto1 = '14525'

texto2 = 'conteudo branco'

texto1_modificado = zero_esq(texto1, 20)

texto2_modificado = branco_dir(texto2, 50)

print texto1_modificado

print texto2_modificado, " - tamanho: %d" %(len(texto2_modificado))

O parâmetro tamanho, presente nas duas funções, pode variar ao longo do programa, assim não posso considerar os valores 20 e 50 como valores fixo (foi só um exemplo de uso da função). Outra restrição que tenho é que o python instalado é a versão 2.5

Obrigado pela ajuda!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
texto1 = '14525'
texto2 = 'conteudo branco'

texto1_modificado = '%020d' % int(texto1)
texto2_modificado = '%-50s' % texto2

print texto1_modificado
print texto2_modificado, " - tamanho: %d" %(len(texto2_modificado))

Link para o comentário
Compartilhar em outros sites

  • 0
texto1 = '14525'
texto2 = 'conteudo branco'

texto1_modificado = '%020d' % int(texto1)
texto2_modificado = '%-50s' % texto2

print texto1_modificado
print texto2_modificado, " - tamanho: %d" %(len(texto2_modificado))
Valeu, Kakao! Como essa função era chamada dentro de um 'for' o ganho foi considerável. Tem um outro ponto que é passível de ser "otimizado", só que estou na dúvida. Tentei comparar as duas funções abaixo:
def retorna_conteudo1(texto):
    if texto == '' or texto.strip() == '':
        return 'vazio!'
    else:
        return 'conteudo!'

def retorna_conteudo2(texto):
    if texto.strip() == '':
        return 'vazio!'
    else:
        return 'conteudo!'

Em muitos casos o parâmetro tem conteúdo e vários outros o conteúdo do parâmetro é uma string com vários espaços em branco. Como em muitos casos o parâmetro vai ter algum conteúdo válido, eu já verifico a condição sem ter de fazer o strip() e assim ganhar mais algum tempo. Concordam?

Editado por Rafael do Espirito Santo
Link para o comentário
Compartilhar em outros sites

  • 0
texto1 = '14525'
texto2 = 'conteudo branco'

texto1_modificado = '%020d' % int(texto1)
texto2_modificado = '%-50s' % texto2

print texto1_modificado
print texto2_modificado, " - tamanho: %d" %(len(texto2_modificado))
Valeu, Kakao! Como essa função era chamada dentro de um 'for' o ganho foi considerável. Tem um outro ponto que é passível de ser "otimizado", só que estou na dúvida. Tentei comparar as duas funções abaixo:
def retorna_conteudo1(texto):
    if texto == '' or texto.strip() == '':
        return 'vazio!'
    else:
        return 'conteudo!'

def retorna_conteudo2(texto):
    if texto.strip() == '':
        return 'vazio!'
    else:
        return 'conteudo!'
Em muitos casos o parâmetro tem conteúdo e vários outros o conteúdo do parâmetro é uma string com vários espaços em branco. Como em muitos casos o parâmetro vai ter algum conteúdo válido, eu já verifico a condição sem ter de fazer o strip() e assim ganhar mais algum tempo. Concordam?
Eu fiz um teste bobo e parece que não...
for i in range(1, 100000):
    lista_final.append('conteudo')
    lista_final.append('     ')

inicio = datetime.now()
for i in lista_final:
    retorna_conteudo1(i)
termino = datetime.now()

duracao = termino - inicio
print "Rodada 1", duracao


inicio = datetime.now()
for i in lista_final:
    retorna_conteudo2(i)
termino = datetime.now()

duracao = termino - inicio
print "Rodada 2", duracao

Nesse teste o método que faz o strip de cara foi mais rápido...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...