15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

extremamente lentos (acesso a atributos, chamadas a funções). A origem desses

gargalos em um programa em Python pode ser um tanto obscura.

A melhor técnica aqui é ignorar sua intuição e medir diretamente o desempenho

de um programa antes de tentar otimizá-lo. O Python oferece um recurso nativo

chamado de profiler (traçador de perfil) para determinar que partes de um

programa são responsáveis por sua execução. Isso permite que concentremos os

esforços de otimização nas maiores fontes de problemas e ignoremos as partes

do programa que não causam impacto na velocidade de execução.

Por exemplo, digamos que se queira determinar por que um algoritmo em seu

programa é lento. No exemplo a seguir, definimos uma função que classifique a

uma lista de dados usando um algoritmo de ordenação por inserção:

def insertion_sort(data):

result = []

for value in data:

insert_value(result, value)

return result

O mecanismo central da ordenação por inserção é a função que encontra o ponto

de inserção de cada item dos dados. No exemplo a seguir, definimos uma versão

extremamente ineficiente da função insert_value, que faz uma varredura linear

sobre um array de entrada:

def insert_value(array, value):

for i, existing in enumerate(array):

if existing > value:

array.insert(i, value)

return

array.append(value)

Para traçar o perfil de insertion_sort e insert_value, criamos um conjunto de

dados de números aleatórios e definimos uma função chamada test, que

passamos ao profiler.

from random import randint

max_size = 10**4

data = [randint(0, max_size) for _ in range(max_size)]

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!