def is_letter(character):
return character in
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
Percebi que essa função faria um loop de aZ, então devemos acelerar isso usando um conjunto!
Primeiro é lento?
In [5]: %timeit is_letter(';')
10000000 loops, best of 3: 155 ns per loop
Acho que não demorou 1 segundo para fazer ~ 10M em sua entrada de pior caso
Mas devemos ser capazes de acelerá-lo usando um conjunto (uma pesquisa de hash em vez de olhar para todas as 52 coisas)
def is_letter(character):
return character in
set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
In [7]: %timeit is_letter(';')
100000 loops, best of 3: 2.29 µs per loop
Ok, então isso é ~ 20x mais lento porque ele constrói um conjunto em cada loop.
vamos consertar isso
letters = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
def is_letter(character):
return character in letters
In [9]: %timeit is_letter(';')
10000000 loops, best of 3: 141 ns per loop
Isso é cerca de 10% mais rápido!
Pode ser fácil tropeçar ao tentar otimizar o código.
Também é fácil de obter resultados nada assombrosos.
Gravar para detectar bugs ou tornar as coisas mais lentas é uma possibilidade, certifique-se de criar o perfil das coisas em entradas semelhantes ao que você espera e testar seu código!
nota: você pode apenas usá- character.isalpha()
lo tem desempenho semelhante