ComenzarEmpieza gratis

Utilizar %lprun: arreglar el cuello de botella

En el ejercicio anterior, hiciste un perfil de la función convert_units() y viste que la comprensión de la lista new_hts podía ser un posible cuello de botella. ¿Te has dado cuenta de que la comprensión de la lista new_wts también representaba un porcentaje similar del tiempo de ejecución? Esto es una indicación de que tal vez quieras crear los objetos new_hts y new_wts utilizando una técnica diferente.

Como la altura y el peso de cada héroe se almacenan en un arreglo numpy, puedes utilizar la emisión de arreglos en lugar de la comprensión de listas para convertir las alturas y los pesos. Esto se ha implementado en la siguiente función:

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

Carga el paquete line_profiler en tu sesión IPython. A continuación, utiliza %lprun para perfilar la función convert_units_broadcast() que actúa sobre los datos de tus superhéroes. Se han cargado en tu sesión la función convert_units_broadcast(), la lista heroes, el arreglo hts y el arreglo wts. Cuando hayas terminado de codificar, responde a la siguiente pregunta:

¿Qué porcentaje de tiempo se dedica a la línea de código de emisión del arreglo new_hts en relación con el tiempo total dedicado a la función convert_units_broadcast()?

Este ejercicio forma parte del curso

Escribir código Python eficiente

Ver curso

Ejercicio interactivo práctico

Pon en práctica la teoría con uno de nuestros ejercicios interactivos

Empezar ejercicio