21.12.2022 Views

python_para_desenvolvedores_2ed

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

280 Performance

um dicionário é muito mais eficiente do que a versão usando recursão, que

faz muitas chamadas de função.

O módulo timeit serve para fazer benchmark de pequenos trechos de código 85 .

O módulo foi projetado para evitar as falhas mais comuns que afetam

programas usados para fazer benchmarks.

Exemplo:

import timeit

# Lista dos quadrados de 1 a 1000

cod = '''s = []

for i in xrange(1, 1001):

s.append(i ** 2)

'''

print timeit.Timer(cod).timeit()

O código é passado para o

benchmark como uma string.

# Com Generator Expression

cod = 'list(x ** 2 for x in xrange(1, 1001))'

print timeit.Timer(cod).timeit()

# Com List Comprehesion

cod = '[x ** 2 for x in xrange(1, 1001)]'

print timeit.Timer(cod).timeit()

Saída:

559.372637987

406.465490103

326.330293894

O List Comprehension é mais eficiente do que o laço tradicional.

Outra forma de melhorar a performance de uma aplicação é usando o Psyco,

que é uma espécie de Just In Compiler (JIT). Durante a execução, ele tenta

otimizar o código da aplicação e, por isso, o módulo deve ser importado antes

do código a ser otimizado (o inicio do módulo principal da aplicação é um

85 O módulo cProfile não é apropriado para avaliar pequenos trechos de código. O módulo

timeit é mais adequado pois executa o código várias vezes durante a avaliação.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!