Ao python 2.6
criar o perfil de uma parte do código Python ( até 3.2
), descobri que o
str
método para converter um objeto (no meu caso, um inteiro) em uma string é quase uma ordem de magnitude mais lento do que usar a formatação de string.
Aqui está o benchmark
>>> from timeit import Timer
>>> Timer('str(100000)').timeit()
0.3145311339386332
>>> Timer('"%s"%100000').timeit()
0.03803517023435887
Alguém sabe por que isso acontece? Estou esquecendo de algo?
python
string
performance
python-3.x
python-2.7
Luca Sbardella
fonte
fonte
'{}'.format(100000)
Respostas:
'%s' % 100000
é avaliada pelo compilador e é equivalente a uma constante em tempo de execução.%
com uma expressão de tempo de execução não é (significativamente) mais rápido do questr
:Observe que
str
ainda é um pouco mais lento, como disse @DietrichEpp, porquestr
envolve operações de pesquisa e chamada de função, enquanto%
compila para um único bytecode imediato:Claro que o acima é verdadeiro para o sistema que testei (CPython 2.7); outras implementações podem ser diferentes.
fonte
str
. Obrigado pela resposta. Não há razão para mudar o código em todos os lugares :-)str
é um nome que pode ser devolvido a algo diferente do tipo de string, mas a formatação de string - isto é, ostr.__mod__
método - não pode ser substituída, o que permite que o compilador faça a otimização. O compilador não faz muito em termos de otimização, mas faz mais do que você imagina :)Um motivo que vem à mente é o fato de
str(100000)
envolver uma pesquisa global, mas"%s"%100000
não envolve . Ostr
global tem que ser visto no âmbito global. Isso não explica toda a diferença:Conforme observado por thg435 ,
fonte