Módulo timeit

Como já escrevi em um post anterior, podemos utilizar o módulo timeit (Time it!) para medir o tempo de execução de nossos programas em Python. Porém, às vezes queremos apenas verificar qual trecho de código obtém menor tempo de execução, para escolher qual abordagem seguir. Por exemplo, quero saber o que acarreta em um menor tempo de execução: fazer um for com a função range() ou com a função xrange()?

Nada melhor do que testar na prática para descobrir qual nos dá o menor tempo de resposta. Para isso, podemos usar a interface de linha de comando que o módulo timeit fornece, quando executado como módulo.

python -m timeit

Assim, podemos testar:

python -m timeit "for i in range(1, 10000): pass"
1000 loops, best of 3: 303 usec per loop
python -m timeit "for i in xrange(1, 10000): pass"
1000 loops, best of 3: 206 usec per loop

Como podemos ver, o uso da função xrange() nos deu um tempo de execução de 97 milisegundos a menos do que utilizando a função range(), considerando o melhor dos casos para ambos. No exemplo acima, o timeit executou 3 baterias de testes compostas por 1000 execuções do código passado como argumento.

Em muitos casos iremos precisar testar um código que possui mais de uma linha. Isso pode ser feito passando cada uma das linhas como um argumento separado para o programa. Por exemplo:

x = 0
for i in range(0, 1000):
    x = i * 2

O código acima poderia ser testado pela linha de comando da seguinte forma:

python -m timeit "x=0" "for i in range(1, 10000):" "    x = i * 2"

Ou seja, cada linha é uma string separada e a indentação é feita linha por linha.

Por que python -m?

Se você está se perguntando o que significa python -m timeit, eis a resposta: ao chamar o interpretador python com a opção -m seguida pelo nome de um módulo existente no ambiente, o interpretador irá buscar o arquivo .py que representa tal módulo e executá-lo como se fosse um programa. O módulo timeit, em meu sistema, fica localizado em /usr/lib/python2.7/timeit.py (como eu sei isso? leia aqui). O que é feito quando executamos python -m timeit é o mesmo que:

python /usr/lib/python2.7/timeit.py "for i in xrange(1, 10000): pass"

Vá em frente e teste.

 

O timeit pode ser usado também dentro de programs Python. Veja mais exemplos: http://docs.python.org/library/timeit.html#examples

2 comentários sobre “Módulo timeit

  1. Pingback: Armazenando senhas de forma segura « Python Help
  2. Pingback: Dicas de produtividade no IPython | Python Help

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s