ComeçarComece gratuitamente

Usar %lprun: corrigir o gargalo

No exercício anterior, você traçou o perfil da função convert_units() e viu que a compreensão da lista new_hts poderia ser um gargalo em potencial. Você notou que a compreensão da lista new_wts também foi responsável por uma porcentagem semelhante do tempo de execução? Isso é uma indicação de que você pode querer criar os objetos new_hts e new_wts usando uma técnica diferente.

Como a altura e o peso de cada herói são armazenados em uma matriz numpy, você pode usar a transmissão de matriz em vez da compreensão de lista para converter as alturas e os pesos. Isso foi implementado na função abaixo:

def convert_units_broadcast(heroes, heights, weights):


    # Array broadcasting instead of list comprehension

    new_hts = heights * 0.39370

    new_wts = weights * 2.20462


    hero_data = {}


    for i,hero in enumerate(heroes):

        hero_data[hero] = (new_hts[i], new_wts[i])



    return hero_data

Carregue o pacote line_profiler em sua sessão do IPython. Em seguida, use o site %lprun para traçar o perfil da função convert_units_broadcast() que atua nos dados de seus super-heróis. A função convert_units_broadcast(), a lista heroes, a matriz hts e a matriz wts foram carregadas em sua sessão. Depois que você terminar de codificar, responda à seguinte pergunta:

Que porcentagem de tempo você gasta na linha de código de transmissão da matriz new_hts em relação à quantidade total de tempo gasto na função convert_units_broadcast()?

Este exercício faz parte do curso

Como escrever um código Python eficiente

Ver Curso

Exercício interativo prático

Transforme a teoria em ação com um de nossos exercícios interativos

Comece o exercício