CommencerCommencer gratuitement

Utilisation de %lprun : résolution du point de blocage

Dans l'exercice précédent, vous avez profilé la fonction convert_units() et constaté que la compréhension de liste new_hts pouvait constituer un point de blocage potentiel. Avez-vous remarqué que la compréhension de liste new_wts représentait également un pourcentage similaire du temps d'exécution ? Cela indique qu'il serait peut-être préférable de créer les objets new_hts et new_wts en utilisant une technique différente.

Étant donné que la taille et le poids de chaque héros sont stockés dans un tableau numpy, vous pouvez utiliser le broadcasting de tableaux plutôt que la compréhension de listes pour convertir les tailles et les poids. Ceci a été implémenté dans la fonction ci-dessous :

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

Veuillez charger le package line_profiler dans votre session IPython. Ensuite, utilisez %lprun pour profiler la fonction convert_units_broadcast() agissant sur les données relatives à vos super-héros. La fonction , la liste heroes, le tableau hts et le tableau wts ont été chargés dans votre session. Une fois le codage terminé, veuillez répondre à la question suivante :

Quel pourcentage du temps est consacré à la ligne de code de diffusion du tableau new_hts par rapport au temps total passé dans la fonction convert_units_broadcast() ?

Cet exercice fait partie du cours

Écrire du code Python efficace

Afficher le cours

Exercice interactif pratique

Passez de la théorie à la pratique avec l’un de nos exercices interactifs

Commencer l’exercice